Agora que sabemos usar o display OLED para escrever mensagens, podemos usá-lo para enviar mensagens de apoio para o usuário durante a execução de um programa!

Por exemplo, digamos que você quer usar periféricos para medir a aceleração de uma BitDogLab em movimento! Para isso, temos o código abaixo, que usa a matriz de LEDs, o display OLED e um periférico chamado MPU9250, um acelerômetro. O display mostra a aceleração em mensagens atualizadas com frequência.

from machine import Pin, SoftI2C
from ssd1306 import SSD1306_I2C
from neopixel import NeoPixel
from mpu9250 import MPU9250
import time
import math

# Inicializar o I2C para o MPU (I2C1)
i2c_mpu = SoftI2C(scl=Pin(3), sda=Pin(2))
mpu = MPU9250(i2c_mpu)

# Inicializar o I2C para o OLED (I2C0)
i2c_oled = SoftI2C(scl=Pin(15), sda=Pin(14))
oled = SSD1306_I2C(128, 64, i2c_oled)

# Inicializar a matriz NeoPixel no GPIO7
NUM_LEDS = 25
np = NeoPixel(Pin(7), NUM_LEDS)

# Inicializar a matriz NeoPixel no GPIO7
NUM_LEDS = 25
np = NeoPixel(Pin(7), NUM_LEDS)

# Definindo a matriz de LEDs (5x5)
LED_MATRIX = [
    [24, 23, 22, 21, 20],
    [15, 16, 17, 18, 19],
    [14, 13, 12, 11, 10],
    [5, 6, 7, 8, 9],
    [4, 3, 2, 1, 0]
]

# Função para limpar a matriz de LEDs
def clear_matrix(np):
    for i in range(NUM_LEDS):
        np[i] = (0, 0, 0)
    np.write()
       

# Inicializar posição do LED
x, y = 2, 2

while True:
    # Limpar a matriz
    clear_matrix(np)

    # Ler dados de aceleração
    accel = mpu.acceleration
    ax, ay, az = accel

    # Atualizar posição do LED
    x = int(2 + ax)
    x = max(0, min(4, x))
    
    y = int(2 + ay)
    y = max(0, min(4, y))

    # Definir a cor do LED
    r, g, b = int(abs(ax) * 25), int(abs(ay) * 25), int(abs(az) * 25)
    np[LED_MATRIX[x][y]] = (r, g, b)
    np.write()

    # Atualizar o display OLED
    oled.fill(0)
    oled.text("Acel (m/s^2):", 0, 0)
    oled.text(f"AX: {ax:.2f}", 0, 20)
    oled.text(f"AY: {ay:.2f}", 0, 30)
    oled.text(f"AZ: {az:.2f}", 0, 40)
    oled.show()

    # Pausa antes da próxima atualização
    time.sleep(0.05)