# =======================================================
# ESP32 - PWM + ADC + BUTTON (PULL-DOWN)
# =======================================================
from machine import Pin, ADC, PWM
import time
# --- KHAI BÁO CHÂN ---
led = PWM(Pin(2)) # LED PWM
led.freq(1000) # tần số PWM
pot = ADC(Pin(34)) # biến trở
pot.atten(ADC.ATTN_11DB) # đọc full 0–3.3V (0–4095)
button = Pin(14, Pin.IN, Pin.PULL_DOWN) # pull-down nội
# --- BIẾN TRẠNG THÁI ---
led_state = False
last_btn = 0
last_debounce_time = 0
debounce_delay = 200 # ms
while True:
btn = button.value()
# --- PHÁT HIỆN NHẤN (0 → 1) + DEBOUNCE ---
current_time = time.ticks_ms()
if (btn == 1 and last_btn == 0 and
time.ticks_diff(current_time, last_debounce_time) > debounce_delay):
led_state = not led_state
last_debounce_time = current_time
last_btn = btn
# --- ĐIỀU KHIỂN LED ---
if led_state:
val = pot.read() # 0–4095
# scale về 0–65535 cho PWM
duty = int(val * 65535 / 4095)
led.duty_u16(duty)
else:
led.duty_u16(0)
time.sleep_ms(10)