# Nombre: ROSARIO HERNANDEZ JESUS ANTONIO
# El circuito NLSF595 es un registro diseñado para manejar LED's RGB o displays de ánodo común
# el registro recibe información por el protocolo SPI y se pueden conectar varios en cascada
# Objetivo del problema: Modifique el programa para que el contador cambie cuando se presionan los botones
# Con GPIO14 el contador se debe incrementar (de 99 pasará a 0)
# Con GPIO15 el contador se debe decrementar (de 0 pasará a 99)
# Utilice interrupciones por GPIO y considere la eliminación de rebotes
from machine import Pin, SPI
import time
spi = SPI(0, baudrate=500000, sck=Pin(18), mosi=Pin(19), miso=Pin(16))
ss = Pin(17, Pin.OUT)
ss.value(1)
# BOTONES
boton_incremento = Pin(14, Pin.IN, Pin.PULL_UP)
boton_decremento = Pin(15, Pin.IN, Pin.PULL_UP)
# Arreglo con los códigos en 7 segmentos para displays de ánodo común
digitos = [
0b11000000, # 0
0b11111001, # 1
0b10100100, # 2
0b10110000, # 3
0b10011001, # 4
0b10010010, # 5
0b10000010, # 6
0b11111000, # 7
0b10000000, # 8
0b10010000 # 9
]
# Envía información por SPI
def Send(valor):
u = digitos[valor % 10]
d = digitos[valor//10]
buf = [u, d]
ss.value(0) # Habilita al esclavo
spi.write(bytearray(buf)) # Manda datos
ss.value(1) # Deshabilita al esclavo
contador = 0
retardo = 300
ult_presionado = {
"incr": 0,
"decr": 0
}
def incremento(boton_incremento):
global contador
tiempo_actual = time.ticks_ms()
if time.ticks_diff(tiempo_actual, ult_presionado["incr"]) > retardo:
contador = (contador + 1) % 100
Send(contador)
ult_presionado["incr"] = tiempo_actual
def decremento(boton_decremento):
global contador
tiempo_actual = time.ticks_ms()
if time.ticks_diff(tiempo_actual, ult_presionado["decr"]) > retardo:
contador = (contador - 1) % 100
Send(contador)
ult_presionado["decr"] = tiempo_actual
# INTERRUPCIONES
boton_incremento.irq(trigger=Pin.IRQ_FALLING, handler=incremento)
boton_decremento.irq(trigger=Pin.IRQ_FALLING, handler=decremento)
Send(contador)
while True:
pass