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)
BOOTSELLED1239USBRaspberryPiPico©2020RP2-8020/21P64M15.00TTT