added onClick in Button

This commit is contained in:
Nils Schulte 2020-03-18 22:45:50 +01:00
parent 78de42a4e2
commit e7c4577e28
3 changed files with 39 additions and 18 deletions

View File

@ -2,29 +2,35 @@ import machine
import time import time
class Button(): class Button():
def __init__(self,pin,onPushDown = None, onPushUp = None,debounceTimeMs = 50,inputMode = machine.Pin.IN,inverted = False): def __init__(self,pin,onPushDown = None, onPushUp = None,onClick = None,onHold = None,clickTime=300,debounceTimeMs = 50,inputMode = machine.Pin.IN,inverted = False):
self.pin = machine.Pin(pin,inputMode) self.pin = machine.Pin(pin,inputMode)
self.pressedTime = -debounceTimeMs self.debounceTimestamp = -debounceTimeMs
self.debounceTimeMs = int(debounceTimeMs) self.debounceTimeMs = int(debounceTimeMs)
self.clickTime = clickTime
self.pushDownTimeStamp = -clickTime
self.onPushDown = onPushDown self.onPushDown = onPushDown
self.onPushUp = onPushUp self.onPushUp = onPushUp
self.onClick = onClick
self.onHold = onHold
self.pin.irq(trigger=machine.Pin.IRQ_RISING|machine.Pin.IRQ_FALLING , handler=self._IRQ) self.pin.irq(trigger=machine.Pin.IRQ_RISING|machine.Pin.IRQ_FALLING , handler=self._IRQ)
self.value = self.pin.value() self.value = self.pin.value()
self.inverted = inverted self.inverted = inverted
def _IRQ(self,p): def _IRQ(self,p):
new_value = self.pin.value() new_value = self.pin.value()
time_ms = time.ticks_ms()
if (self.value != new_value): if (self.value != new_value):
self.value = new_value self.value = new_value
time_ms = time.ticks_ms() if ((self.debounceTimestamp+self.debounceTimeMs) < time_ms):
if ((self.pressedTime+self.debounceTimeMs) < time_ms): self.debounceTimestamp = time_ms
self.pressedTime = time_ms
if (new_value ^ self.inverted): if (new_value ^ self.inverted):
if (self.onPushUp != None): if (self.onPushUp != None):
self.onPushUp() self.onPushUp()
if (self.onClick != None and (self.pushDownTimeStamp + self.clickTime > time_ms)):
self.onClick()
else: else:
if (self.onPushDown != None): if (self.onPushDown != None):
self.onPushDown() self.onPushDown()
self.pushDownTimeStamp = time_ms
else: else:
pass pass

View File

@ -26,4 +26,5 @@ Pin (ESP32)| Function
[DS3231 RTC](https://github.com/micropython-Chinese-Community/mpy-lib/tree/master/misc/DS3231) [DS3231 RTC](https://github.com/micropython-Chinese-Community/mpy-lib/tree/master/misc/DS3231)
[NodeMCU-32S Pinout](https://www.shenzhen2u.com/NodeMCU-32S) [NodeMCU-32S Pinout](https://www.shenzhen2u.com/NodeMCU-32S)
[ESP32 Usable Pins](https://randomnerdtutorials.com/esp32-pinout-reference-gpios/) [ESP32 Usable Pins](https://randomnerdtutorials.com/esp32-pinout-reference-gpios/)

36
main.py
View File

@ -20,21 +20,35 @@ stepperhour = StepperL298M.Stepper([12,27,26,25],inverted=True)
clock = StepperClock.StepperClock(stepperhour,stepperminu) clock = StepperClock.StepperClock(stepperhour,stepperminu)
LED = machine.Pin(32,machine.Pin.OUT) leftButtonLED = machine.Pin(32,machine.Pin.OUT)
middleButtonLED = machine.Pin(33,machine.Pin.OUT)
rightButtonLED = machine.Pin(13,machine.Pin.OUT)
def leftButtonClickDown():
leftButtonLED.on()
def leftButtonClickUp():
leftButtonLED.off()
def leftButtonClick(): def leftButtonClick():
global i stepperminu.stepnum = (stepperminu.stepnum+8)%stepperminu.stepsPerRev
print("Down",LED.value()) leftButton = Button.Button(pin=36,onPushDown=leftButtonClickDown,onPushUp=leftButtonClickUp,onClick=leftButtonClick,inverted=True)
LED.value(not LED.value())
stepperhour.rotateTo(stepperhour.getTarget()+0.1)
Button.Button(36,leftButtonClick,None,inverted=True)
def rightButtonClickDown():
rightButtonLED.on()
def rightButtonClickUp():
rightButtonLED.off()
def rightButtonClick(): def rightButtonClick():
global i stepperhour.stepnum = (stepperhour.stepnum+8)%stepperhour.stepsPerRev
print("Down",LED.value()) rightButton = Button.Button(pin=34,onPushDown=rightButtonClickDown,onPushUp=rightButtonClickUp,onClick=rightButtonClick,inverted=True)
LED.value(not LED.value())
stepperhour.rotateTo(stepperhour.getTarget()-0.2) def middleButtonClickDown():
Button.Button(34,rightButtonClick,None,inverted=True) pass
def middleButtonClickUp():
pass
def middleButtonClick():
middleButtonLED.value(not middleButtonLED.value())
middleButton = Button.Button(pin=39,onPushDown=middleButtonClickDown,onPushUp=middleButtonClickUp,onClick=middleButtonClick,inverted=True)
clock.start() clock.start()