|
@@ -1,12 +1,93 @@
|
|
|
-from machine import Pin, Signal
|
|
|
-LED_PIN = Signal(13, Pin.OUT, invert=False)
|
|
|
-BUTTON_PIN = Pin(0, Pin.IN)
|
|
|
+from enum import Enum, auto
|
|
|
+import machine
|
|
|
+import network
|
|
|
+import urequests as requests
|
|
|
+
|
|
|
+class ButtonState(Enum):
|
|
|
+ IDLE = auto()
|
|
|
+ FWD_1 = auto()
|
|
|
+ FWD_2 = auto()
|
|
|
+ FWD_RDY = auto()
|
|
|
+ REV_1 = auto()
|
|
|
+ REV_2 = auto()
|
|
|
+ REV_RDY = auto()
|
|
|
+
|
|
|
+def check_forward_1(handler):
|
|
|
+ if handler.total_change > 30:
|
|
|
+ led_red2.on()
|
|
|
+ handler.reset()
|
|
|
+ return ButtonState.FWD_2
|
|
|
+ return ButtonState.FWD_1
|
|
|
+
|
|
|
+def check_forward_2(handler):
|
|
|
+ global button_triggered
|
|
|
+ if handler.total_change > 30 and wifi.isconnected():
|
|
|
+ led_green.on()
|
|
|
+ button_triggered = False
|
|
|
+ return ButtonState.FWD_RDY
|
|
|
+ return ButtonState.FWD_2
|
|
|
+
|
|
|
+def check_forward_trigger(handler):
|
|
|
+ if (button_triggered):
|
|
|
+ # Ping overlay server
|
|
|
+ led_red1.off()
|
|
|
+ led_red2.off()
|
|
|
+ led_green.off()
|
|
|
+ return ButtonState.IDLE
|
|
|
+ return ButtonState.FWD_RDY
|
|
|
|
|
|
button_triggered = False
|
|
|
def button_handler(pin):
|
|
|
global button_triggered
|
|
|
button_triggered = True
|
|
|
|
|
|
+def time_up(timer):
|
|
|
+ global current_state, current_pos
|
|
|
+ current_state = ButtonState.IDLE
|
|
|
+ current_pos = 0
|
|
|
+ input_handler.reset()
|
|
|
+
|
|
|
+def dummy_cb(*args, **kwargs):
|
|
|
+ return current_state
|
|
|
+
|
|
|
+def get_state_handler(state):
|
|
|
+ handler_map = {
|
|
|
+ ButtonState.FWD_1: check_forward_1,
|
|
|
+ ButtonState.FWD_2: check_forward_2,
|
|
|
+ ButtonState.FWD_RDY: check_forward_trigger
|
|
|
+ }
|
|
|
+ return handler_map.get(state, dummy_cb)
|
|
|
+
|
|
|
+activity_timeout = machine.Timer(-1)
|
|
|
+current_pos = input_handler.total_change
|
|
|
+current_state = ButtonState.IDLE
|
|
|
+
|
|
|
+while True:
|
|
|
+ while current_state == ButtonState.IDLE:
|
|
|
+ machine.lightsleep(CONFIG['logic']['sleep_time'] * 1000)
|
|
|
+ if input_handler.total_change - current_pos > CONFIG['logic']['wake_threshold']:
|
|
|
+ current_state = ButtonState.FWD_1
|
|
|
+ elif current_pos - input_handler.total_change > CONFIG['logic']['wake_threshold']:
|
|
|
+ current_state = ButtonState.REV_1
|
|
|
+
|
|
|
+ wifi = network.WLAN(network.STA_IF)
|
|
|
+ wifi.active(True)
|
|
|
+ wifi.connect(config['wifi']['ssid'], config['wifi']['password'])
|
|
|
+ led_red1.on()
|
|
|
+ activity_timeout.init(mode=machine.Timer.ONE_SHOT, callback=time_up,
|
|
|
+ period=CONFIG['logic']['active_time'] * 1000)
|
|
|
+ input_handler.reset()
|
|
|
+ while current_state != ButtonState.IDLE:
|
|
|
+ machine.lightSleep(100)
|
|
|
+ handler_func = get_state_handler(current_state)
|
|
|
+ current_state = handler_func(input_handler)
|
|
|
+ wifi.active(False)
|
|
|
+
|
|
|
+"""
|
|
|
+from machine import Pin, Signal
|
|
|
+LED_PIN = Signal(13, Pin.OUT, invert=False)
|
|
|
+BUTTON_PIN = Pin(0, Pin.IN)
|
|
|
+
|
|
|
# Turn off "ready" LED
|
|
|
LED_PIN.off()
|
|
|
|
|
@@ -52,3 +133,4 @@ while True:
|
|
|
LED_PIN.on()
|
|
|
else:
|
|
|
time.sleep(1)
|
|
|
+"""
|