From e7c4577e286148c87376622b1c9b6f02d04e99f8 Mon Sep 17 00:00:00 2001 From: Nils Schulte Date: Wed, 18 Mar 2020 22:45:50 +0100 Subject: [PATCH] added onClick in Button --- Button.py | 20 +++++++++++++------- README.md | 1 + main.py | 36 +++++++++++++++++++++++++----------- 3 files changed, 39 insertions(+), 18 deletions(-) diff --git a/Button.py b/Button.py index dc1c7c8..bfa0f77 100644 --- a/Button.py +++ b/Button.py @@ -2,29 +2,35 @@ import machine import time 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.pressedTime = -debounceTimeMs + self.debounceTimestamp = -debounceTimeMs self.debounceTimeMs = int(debounceTimeMs) + self.clickTime = clickTime + self.pushDownTimeStamp = -clickTime self.onPushDown = onPushDown 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.value = self.pin.value() self.inverted = inverted def _IRQ(self,p): new_value = self.pin.value() + time_ms = time.ticks_ms() 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 ((self.debounceTimestamp+self.debounceTimeMs) < time_ms): + self.debounceTimestamp = time_ms if (new_value ^ self.inverted): if (self.onPushUp != None): self.onPushUp() + if (self.onClick != None and (self.pushDownTimeStamp + self.clickTime > time_ms)): + self.onClick() else: if (self.onPushDown != None): self.onPushDown() + self.pushDownTimeStamp = time_ms else: - pass - \ No newline at end of file + pass \ No newline at end of file diff --git a/README.md b/README.md index f7b7003..850f2ae 100644 --- a/README.md +++ b/README.md @@ -26,4 +26,5 @@ Pin (ESP32)| Function [DS3231 RTC](https://github.com/micropython-Chinese-Community/mpy-lib/tree/master/misc/DS3231) [NodeMCU-32S Pinout](https://www.shenzhen2u.com/NodeMCU-32S) + [ESP32 Usable Pins](https://randomnerdtutorials.com/esp32-pinout-reference-gpios/) diff --git a/main.py b/main.py index c90f8fe..6bcf765 100644 --- a/main.py +++ b/main.py @@ -20,21 +20,35 @@ stepperhour = StepperL298M.Stepper([12,27,26,25],inverted=True) 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(): - global i - print("Down",LED.value()) - LED.value(not LED.value()) - stepperhour.rotateTo(stepperhour.getTarget()+0.1) -Button.Button(36,leftButtonClick,None,inverted=True) + stepperminu.stepnum = (stepperminu.stepnum+8)%stepperminu.stepsPerRev +leftButton = Button.Button(pin=36,onPushDown=leftButtonClickDown,onPushUp=leftButtonClickUp,onClick=leftButtonClick,inverted=True) +def rightButtonClickDown(): + rightButtonLED.on() +def rightButtonClickUp(): + rightButtonLED.off() def rightButtonClick(): - global i - print("Down",LED.value()) - LED.value(not LED.value()) - stepperhour.rotateTo(stepperhour.getTarget()-0.2) -Button.Button(34,rightButtonClick,None,inverted=True) + stepperhour.stepnum = (stepperhour.stepnum+8)%stepperhour.stepsPerRev +rightButton = Button.Button(pin=34,onPushDown=rightButtonClickDown,onPushUp=rightButtonClickUp,onClick=rightButtonClick,inverted=True) + +def middleButtonClickDown(): + 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()