from machine import ADC, Pin, PWM
from time import sleep_ms
# ---- Pins ----
POT1, POT2 = 33, 32
LED1_PIN, LED2_PIN = 19, 18
BTN_MODE = 16
# ---- Inputs ----
pot1 = ADC(Pin(POT1)) # ~0..4095
pot2 = ADC(Pin(POT2)) # ~0..4095
btn = Pin(BTN_MODE, Pin.IN, Pin.PULL_UP) # released=1, pressed=0
# ---- Outputs ----
led1 = PWM(Pin(LED1_PIN), freq=1000) # duty 0..1023
led2 = PWM(Pin(LED2_PIN), freq=1000)
# ---- Helpers ----
def to_duty(raw):
if raw < 0: raw = 0 # Clamping Data less than 0
if raw > 4095: raw = 4095 # Clamping Data more than 4095
return (raw * 1023) // 4095 # Mapping raw value to duty
def inv(duty):
return 1023 - duty
def print_mode(m):
if m == 1:
print(" Control Mode 1 : LED 1 Direct - LED 2 Direct ")
print("--------------------------------------------")
elif m == 2:
print(" Control Mode 2 : LED 1 Inverted - LED 2 Direct ")
print("--------------------------------------------")
elif m == 3:
print(" Control Mode 3 : LED 1 Direct - LED 2 Inverted")
print("--------------------------------------------")
else: # m == 4
print(" Control Mode 4 : LED 1 Inverted - LED 2 Inverted")
print("--------------------------------------------")
# ---- Mode state ----
# m=1: LED1 natural, LED2 natural
# m=2: LED1 inverted, LED2 natural
# m=3: LED1 natural, LED2 inverted
# m=4: LED1 inverted, LED2 inverted
m = 1
last_btn = 1
print_mode(m)
while True:
# Button: detect press (1->0), then cycle 1..4
now = btn.value()
if last_btn == 1 and now == 0: # pressed
m += 1
if m > 4:
m = 1
print_mode(m)
sleep_ms(180) # debounce
last_btn = now
# Read pots → map to duty
d1 = to_duty(pot1.read()) # POT1 controls LED1
d2 = to_duty(pot2.read()) # POT2 controls LED2
# Apply current mode
if m == 1: # both direct
led1.duty(d1); led2.duty(d2)
elif m == 2: # LED1 inverted, LED2 direct
led1.duty(inv(d1)); led2.duty(d2)
elif m == 3: # LED1 direct, LED2 inverted
led1.duty(d1); led2.duty(inv(d2))
else: # m == 4: both inverted
led1.duty(inv(d1)); led2.duty(inv(d2))
sleep_ms(30)
LED 1
LED 2
LED 1
Controller
LED 2
Controller
Mode
Controller