import machine import time class Button(): def __init__(self,pin,onPushDown = None, onPushUp = None,debounceTimeMs = 50,inputMode = machine.Pin.IN,inverted = False): self.pin = machine.Pin(pin,inputMode) self.pressedTime = -debounceTimeMs self.debounceTimeMs = int(debounceTimeMs) self.onPushDown = onPushDown self.onPushUp = onPushUp self.pin.irq(trigger=machine.Pin.IRQ_RISING|machine.Pin.IRQ_FALLING , handler=self._IRQ) self.value = self.pin.value() self.inverted = inverted def _IRQ(self,p): new_value = self.pin.value() if (self.value != new_value): self.value = new_value time_ms = time.ticks_ms() if ((self.pressedTime+self.debounceTimeMs) < time_ms): self.pressedTime = time_ms if (new_value ^ self.inverted): if (self.onPushUp != None): self.onPushUp() else: if (self.onPushDown != None): self.onPushDown() else: pass