from machine import Pin
from time import sleep_ms
""" Exemplo de detecção de borda
A ideia é que não interessa o estado do botão diretamente, mas sim o momento em que ele muda
Por esse motivo, são usadas duas variáveis, uma que armazena o estado atual do botão (sem veriticá-lo)
e outra armazena o estado novo do botão (verificado). Quando estes ficam diferentes, significa que
o botão foi solto ou pressionado. Se se deseja disparar uma ação apenas quando o botão é pressionado,
então deve-se fazer um teste adicional, para ver se a mudança foi para este estado.
Aqui, o pino em que o botão está conectado fica 1, se este for pressionado. Para garantir um estado
constante no pino quando o botão não está pressionado, deve-se adicionar um resistor de pull down,
que conectará o pino ao gnd, fazendo com que este fique sempre 0, a não ser quando o botão está pressionado
No código, isso é feito diretamente no controlador, pois o pino 25 tem um resistor interno que pode
ser acionado como mostrado na linha de definição do pino
"""
led = Pin (13, Pin.OUT)
bot = Pin (25, Pin.IN, Pin.PULL_DOWN)
bAtual = bNovo = bot.value() # Definição inicial dos estados do pino - Tudo igual
partida = 0
print ('Tudo certo. Começando')
while True:
bNovo = bot.value() # Varre continuamente o estado do pino
if bNovo != bAtual: # Houve uma mudança de estado (borda)
print ("Mudança de estado")
if bNovo == 1: # A mudança foi por pressionamento
partida = 1
print ("Botão pressionado")
bAtual = bNovo # Independente do motivo da mudança, depois de detectado, o novo estado passa a ser o atual
sleep_ms(150) # Necessário para fazer o debounce (evitar ruídos do botão)
if partida:
led.on() # Aqui seria o que o programa deveria fazer, uma vez disparada a partida
else:
led.off()