import machine
import utime
# -----------------------------
# OUTPUT DEFINITIONS
# -----------------------------
led_onboard = machine.Pin(25, machine.Pin.OUT)
led_red = machine.Pin(2, machine.Pin.OUT)
led_yellow = machine.Pin(3, machine.Pin.OUT)
led_green = machine.Pin(4, machine.Pin.OUT)
# -----------------------------
# INITIAL STATES
# -----------------------------
led_onboard.value(1) # turn on onboard LED
red_led_state = 0
yellow_led_state = 0
green_led_state = 0
led_red.value(red_led_state)
led_yellow.value(yellow_led_state)
led_green.value(green_led_state)
last_time = 0 # last interrupt time (ms)
DEBOUNCE_TIME = 20 # debounce time (ms)
# -----------------------------
# INPUT DEFINITIONS
# Buttons use PULL_DOWN configuration
# -----------------------------
btn1 = machine.Pin(5, machine.Pin.IN, machine.Pin.PULL_DOWN)
btn2 = machine.Pin(6, machine.Pin.IN, machine.Pin.PULL_DOWN)
btn3 = machine.Pin(7, machine.Pin.IN, machine.Pin.PULL_DOWN)
# -----------------------------
# IRQ Handler
# -----------------------------
def gpio_handler(pin):
global red_led_state, yellow_led_state, green_led_state, last_time
#now = utime.ticks_ms()
# if less than DEBOUNCE_TIME since last press then ignore (bouncing)
#if utime.ticks_diff(now, last_time) < DEBOUNCE_TIME:
# return
print(f"interrupt triggered on pin {pin}")
#last_time = now
#print(btn2.value())
if pin == btn1:
red_led_state ^= 1 # toggle the value
led_red.value(red_led_state)
elif pin == btn2:
yellow_led_state ^= 1 # toggle the value
led_yellow.value(yellow_led_state)
else:
green_led_state ^= 1 # toggle the value
led_green.value(green_led_state)
def button_handler_new(pin):
now = utime.ticks_ms()
global red_led_state, last_time
# if less than DEBOUNCE_TIME since last press → ignore (bouncing)
if utime.ticks_diff(now, last_time) < DEBOUNCE_TIME:
return
print(btn1.value())
# update last accepted interrupt time
last_time = now
# toggle LED (XOR)
red_led_state ^= 1
led_red.value(red_led_state)
# -----------------------------
# IRQ Definitions
# -----------------------------
btn1.irq(trigger=machine.Pin.IRQ_RISING, handler=gpio_handler)
btn2.irq(trigger=machine.Pin.IRQ_RISING, handler=gpio_handler)
btn3.irq(trigger=machine.Pin.IRQ_RISING, handler=gpio_handler)
print("Program started! Press buttons...")
# -----------------------------
# MAIN LOOP
# -----------------------------
while True:
#print(btn1.value())
utime.sleep(0.01) # sleep
# -----------------------------
# EXIT SEQUENCE
# -----------------------------
#print("Finished!")
#led_onboard.value(0)
#led_red.value(0)
#led_yellow.value(0)
#led_green.value(0)