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
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

View File

@ -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/)

36
main.py
View File

@ -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()