aa
This commit is contained in:
62
init.py
62
init.py
@@ -27,6 +27,11 @@ class AlarmClock:
|
|||||||
lastButtonPressTime: float = 0.0
|
lastButtonPressTime: float = 0.0
|
||||||
lastButtonStateChangeTime: float = 0.0
|
lastButtonStateChangeTime: float = 0.0
|
||||||
debounceDelay: float = 0.05 # 50ms debounce delay
|
debounceDelay: float = 0.05 # 50ms debounce delay
|
||||||
|
longPressThreshold: float = 2.0 # 2 seconds for long press
|
||||||
|
buttonPressStartTime: float = 0.0
|
||||||
|
configMode: str = "normal" # modes: normal, set_hour, set_minute
|
||||||
|
alarmHour: int = 7
|
||||||
|
alarmMinute: int = 0
|
||||||
def __init__(self, pins: dict = {}):
|
def __init__(self, pins: dict = {}):
|
||||||
self.ledGpio = GPIO(pins.get("led", 5), GPIO.OUT)
|
self.ledGpio = GPIO(pins.get("led", 5), GPIO.OUT)
|
||||||
self.buttonGpio = GPIO(pins.get("button", 6), GPIO.IN)
|
self.buttonGpio = GPIO(pins.get("button", 6), GPIO.IN)
|
||||||
@@ -54,13 +59,64 @@ class AlarmClock:
|
|||||||
self.lastButtonStateChangeTime = currentTime
|
self.lastButtonStateChangeTime = currentTime
|
||||||
self.onButtonPress("button", currentButtonState)
|
self.onButtonPress("button", currentButtonState)
|
||||||
|
|
||||||
|
# Check for long press while button is held
|
||||||
|
if currentButtonState and self.buttonPressStartTime > 0:
|
||||||
|
pressDuration = currentTime - self.buttonPressStartTime
|
||||||
|
if pressDuration >= self.longPressThreshold:
|
||||||
|
self.onLongPress()
|
||||||
|
self.buttonPressStartTime = 0.0 # Reset to prevent repeated triggers
|
||||||
|
|
||||||
|
def setLcdTime(self, hours: int, minutes: int):
|
||||||
|
self.lcd.clear()
|
||||||
|
# write the time on spanning both rows of the LCD
|
||||||
|
timeString = f"{hours:02}:{minutes:02}"
|
||||||
|
self.lcd.write(timeString)
|
||||||
|
|
||||||
def onButtonPress(self, button: str, state: bool):
|
def onButtonPress(self, button: str, state: bool):
|
||||||
print(f"Button '{button}' pressed state: {state}")
|
print(f"Button '{button}' pressed state: {state}")
|
||||||
if button == "button" and state == True:
|
currentTime = time()
|
||||||
self.lastButtonPressTime = time()
|
|
||||||
|
if button == "button":
|
||||||
|
if state: # Button pressed down
|
||||||
|
self.buttonPressStartTime = currentTime
|
||||||
|
else: # Button released
|
||||||
|
if self.buttonPressStartTime > 0:
|
||||||
|
pressDuration = currentTime - self.buttonPressStartTime
|
||||||
|
self.buttonPressStartTime = 0.0
|
||||||
|
|
||||||
|
# Only handle as short press if it wasn't a long press
|
||||||
|
if pressDuration < self.longPressThreshold:
|
||||||
|
self.onShortPress()
|
||||||
|
|
||||||
|
def onShortPress(self):
|
||||||
|
"""Handle short button press based on current mode"""
|
||||||
|
if self.configMode == "normal":
|
||||||
|
# Normal mode: toggle relay
|
||||||
self.setRelayState(not self.relayGpio.read())
|
self.setRelayState(not self.relayGpio.read())
|
||||||
self.setLcdText(self.lastButtonPressTime.__str__())
|
self.setLcdText(f"Relay: {'ON' if self.relayGpio.read() else 'OFF'}")
|
||||||
|
elif self.configMode == "set_hour":
|
||||||
|
# Increment hour
|
||||||
|
self.alarmHour = (self.alarmHour + 1) % 24
|
||||||
|
self.setLcdText(f"Set Hour: {self.alarmHour:02d}")
|
||||||
|
elif self.configMode == "set_minute":
|
||||||
|
# Increment minute
|
||||||
|
self.alarmMinute = (self.alarmMinute + 1) % 60
|
||||||
|
self.setLcdText(f"Set Min: {self.alarmMinute:02d}")
|
||||||
|
|
||||||
|
def onLongPress(self):
|
||||||
|
"""Handle long button press - cycle through configuration modes"""
|
||||||
|
if self.configMode == "normal":
|
||||||
|
self.configMode = "set_hour"
|
||||||
|
self.setLcdText(f"Set Hour: {self.alarmHour:02d}")
|
||||||
|
print(f"Entering hour setting mode")
|
||||||
|
elif self.configMode == "set_hour":
|
||||||
|
self.configMode = "set_minute"
|
||||||
|
self.setLcdText(f"Set Min: {self.alarmMinute:02d}")
|
||||||
|
print(f"Switching to minute setting mode")
|
||||||
|
elif self.configMode == "set_minute":
|
||||||
|
self.configMode = "normal"
|
||||||
|
self.setLcdText(f"Saved: {self.alarmHour:02d}:{self.alarmMinute:02d}")
|
||||||
|
print(f"Alarm time saved: {self.alarmHour:02d}:{self.alarmMinute:02d}")
|
||||||
|
|
||||||
def setLcdText(self, text: str):
|
def setLcdText(self, text: str):
|
||||||
self.lcd.clear()
|
self.lcd.clear()
|
||||||
|
|||||||
Reference in New Issue
Block a user