Sobre a Aula
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)