from machine import Pin
from utime import ticks_ms,ticks_diff,sleep_ms
class BTN:
def __init__(self,pin,debounce_time=50, hold_time=500):
self.btn= Pin(pin,Pin.IN,Pin.PULL_UP)
self.funcion=2 #0=1freq 1=2freq 2=apagar
self.last_time=0
self.inicio=None
self.debounce_time=debounce_time
self.hold_time=hold_time
self.estado=True
self.ultimo_estado=True
def held_value(self):
lectura=self.btn.value()
if lectura!=self.ultimo_estado:
self.last_time=ticks_ms()
if ticks_diff(ticks_ms(),self.last_time)>self.debounce_time:
if lectura!=self.estado:
self.estado=lectura
if self.estado==False:
self.inicio=ticks_ms()
else:
if self.inicio is not None:
duracion=ticks_diff(ticks_ms(),self.inicio)
if duracion < self.hold_time:
self.funcion=(self.funcion + 1) % 2 #cambio de estado
self.inicio=None
if self.estado==False and self.inicio is not None:
if ticks_diff(ticks_ms(),self.inicio) >= self.hold_time:
self.funcion=2
self.inicio=None
self.ultimo_estado=lectura
return self.funcion #retorna 0, 1 o 2
boton=BTN(11)
while True:
sleep_ms(10)
print(boton.held_value())