import time
from machine import Pin, Timer, PWM
time.sleep(0.1) # Wait for USB to become ready
IN_1 = 6
IN_2 = 20
IN_3 = 17
IN_4 = 4
OUT_1 = 1
OUT_2 = 15
OUT_PWM = 21
PWM_FREQ = int(3.5 * 1000)
MovePin = Pin(IN_1, Pin.IN)
BtnPin1 = Pin(IN_2, Pin.IN, Pin.PULL_UP)
BtnPin2 = Pin(IN_3, Pin.IN, Pin.PULL_UP)
BtnPin3 = Pin(IN_4, Pin.IN, Pin.PULL_UP)
LedPin1 = Pin(OUT_1, Pin.OUT)
LedPin2 = Pin(OUT_2, Pin.OUT)
LedPin3 = PWM(Pin(OUT_PWM))
LedPin3.freq(PWM_FREQ)
def handle_motion(pinDet):
if pinDet.value():
LedPin1.value(1)
else:
LedPin1.value(0)
MovePin.irq(trigger=Pin.IRQ_RISING|Pin.IRQ_FALLING,
handler=handle_motion)
def log_func(func_name, message):
lt = time.localtime()
f_time = f"{func_name} [{lt[0]:04}-{lt[1]:02}-{lt[2]:02} {lt[3]:02}:{lt[4]:02}:{lt[5]:02}]: {message}"
print(f_time)
led2_state = False # Initially LED2 is off
def btn1_on_click():
global led2_state
led2_state = not led2_state
LedPin2.value(led2_state)
# log_func("btn1_click",f"{'ON' if led2_state else 'OFF'}")
brightness = 0
def pwm_up():
global brightness
if brightness < 100:
brightness += 10
LedPin3.duty_u16(int(65536 / 100 * brightness))
# log_func("pwm_up",f"{brightness}%")
def pwm_down():
global brightness
if brightness > 0:
brightness -= 10
LedPin3.duty_u16(int(65536 / 100 * brightness))
# log_func("pwm_down",f"{brightness}%")
def handle_btn_press(btn, btn_counter, btn_pressed, callback_func, *args):
if btn.value():
btn_counter = 0
btn_pressed = False
else:
btn_counter += 1
if btn_counter >= 4 and not btn_pressed:
btn_pressed = True
if args:
callback_func(*args)
else:
callback_func()
return btn_counter, btn_pressed
btn1_counter = 0
btn1_pressed = False
btn2_counter = 0
btn2_pressed = False
btn3_counter = 0
btn3_pressed = False
def handle_buttons():
global btn1_counter, btn1_pressed, BtnPin1
global btn2_counter, btn2_pressed, BtnPin2
global btn3_counter, btn3_pressed, BtnPin3
btn1_counter, btn1_pressed = handle_btn_press(
BtnPin1, btn1_counter, btn1_pressed, btn1_on_click)
btn2_counter, btn2_pressed = handle_btn_press(
BtnPin2, btn2_counter, btn2_pressed, pwm_up)
btn3_counter, btn3_pressed = handle_btn_press(
BtnPin3, btn3_counter, btn3_pressed, pwm_down)
while True:
handle_buttons()
time.sleep(0.01)