from machine import Pin, I2C
from ssd1306 import SSD1306_I2C
import time
# === Inicialización de pantalla SSD1306 en GPIO 4 (SDA) y 5 (SCL)
i2c = I2C(0, scl=Pin(5), sda=Pin(4), freq=400000)
oled = SSD1306_I2C(128, 64, i2c)
# === Contadores
contador_boton = [0, 0, 0, 0] # ISR botones 10–13
contador_tiempo = 0 # Contador continuo
# === ISR por botón con índice único ===
def crear_isr(indice):
def isr(pin):
global contador_boton
contador_boton[indice] += 1
return isr
# === Configurar botones con ISR ===
for i in range(4):
pin_num = 10 + i
pin = Pin(pin_num, Pin.IN, Pin.PULL_UP)
pin.irq(trigger=Pin.IRQ_FALLING, handler=crear_isr(i))
# === Bucle principal ===
ultimo_tiempo = time.ticks_ms()
while True:
# Actualiza contador continuo cada segundo
if time.ticks_diff(time.ticks_ms(), ultimo_tiempo) >= 1000:
contador_tiempo += 1
ultimo_tiempo = time.ticks_ms()
# Despliegue en OLED
oled.fill(0)
oled.text("Contador:", 0, 0)
oled.text(str(contador_tiempo), 100, 0)
for i in range(4):
oled.text("B{}: {}".format(i + 1, contador_boton[i]), 0, 12 + i * 12)
oled.show()
time.sleep(0.1)