int pot = 34;
int button = 17; // Đổi sang GPIO 17 theo đề mới
int led = 5; // Đổi sang GPIO 5 theo đề mới
// Với Pull-up, trạng thái mặc định khi KHÔNG nhấn là HIGH
int trangThaiGanNhat = HIGH;
bool ttDen = false;
void setup() {
Serial.begin(115200);
Serial.println("He thong ESP32 Pull-up khoi dong...");
pinMode(button, INPUT); // Đề yêu cầu dùng trở Pull-up ngoài
pinMode(led, OUTPUT);
}
void loop() {
int trangThaiNut = digitalRead(button);
// LOGIC PULL-UP:
// - Binh thuong: HIGH
// - Khi nhan: LOW
// Kiểm tra cạnh xuống (khoảnh khắc từ HIGH sang LOW)
if (trangThaiNut == LOW && trangThaiGanNhat == HIGH) {
ttDen = !ttDen;
delay(50); // Chống rung (Debounce)
}
// Cập nhật trạng thái để so sánh cho vòng lặp kế tiếp
trangThaiGanNhat = trangThaiNut;
if (ttDen) {
int potvalue = analogRead(pot);
// ESP32 ADC là 12-bit (0-4095), PWM thường là 8-bit (0-255)
int dosang = map(potvalue, 0, 4095, 0, 255);
analogWrite(led, dosang);
Serial.print("Trạng thái đèn: DANG BAT | Do sang: ");
Serial.println(dosang);
} else {
// Đảm bảo LED tắt hoàn toàn khi ttDen = false
analogWrite(led, 0);
// Serial.println("Trạng thái đèn: DANG TAT"); // Có thể bỏ bớt để đỡ lag Serial
}
delay(10);
}