added onClick in Button
This commit is contained in:
parent
78de42a4e2
commit
e7c4577e28
18
Button.py
18
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
|
||||
|
@ -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
36
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()
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user