import board
import digitalio
import time
time.sleep(0.1)
print("enable RPI")
class LED:
def __init__(self, pin) -> None:
self.pin = digitalio.DigitalInOut(pin)
self.pin.direction = digitalio.Direction.OUTPUT
def toggle(self) -> None:
self.pin.value = not self.pin.value
def on(self):
self.pin.value = True
def off(self):
self.pin.value = False
class Switch:
def __init__(self, pin) -> None:
self.pin = digitalio.DigitalInOut(pin)
self.pin.direction = digitalio.Direction.INPUT
self.pin.pull = digitalio.Pull.UP
self.is_invert = False
self.last_status = self.status
@property
def status(self):
value = self.pin.value
return not value if not self.is_invert else value
def invert(self):
self.is_invert = not self.is_invert
class AltSwitch(Switch):
def __init__(self, pin) -> None:
super().__init__(pin)
def execute(self, func):
if int(self.status) > int(self.last_status):
func()
self.last_status = self.status
class ToggleSwitch(Switch):
def __init__(self, pin) -> None:
super().__init__(pin)
def execute(self, on_func, off_func):
if not (self.status and self.last_status):
if int(self.status) > int(self.last_status):
on_func()
else:
off_func()
self.last_status = self.status
# {"LED":GP17,"toggle":GP28,"alt":GP15}
def toggle_LED(dict) -> None:
led = dict["LED"]
toggle = dict["toggle"]
alt = dict["alt"]
toggle.execute(led.on, led.off)
alt.execute(toggle.invert)
red = {
"LED": LED(board.GP17),
"toggle": ToggleSwitch(board.GP28),
"alt": AltSwitch(board.GP14),
}
blue = {
"LED": LED(board.GP16),
"toggle": ToggleSwitch(board.GP22),
"alt": AltSwitch(board.GP15),
}
def start_LED(dict):
if dict["toggle"].status:
dict["LED"].on()
else:
dict["LED"].off()
start_LED(red)
start_LED(blue)
while True:
toggle_LED(red)
toggle_LED(blue)
time.sleep(0.1)