#define LED_RED_PIN 15
#define LED_YELLOW_PIN 14
#define LED_GREEN_PIN 13
#define BUZZER_PIN 17
#define BUTTON_PIN 28
bool pedestrianRequest = false;
void setLights(bool redState, bool yellowState, bool greenState) {
digitalWrite(LED_RED_PIN, redState);
digitalWrite(LED_YELLOW_PIN, yellowState);
digitalWrite(LED_GREEN_PIN, greenState);
}
void beepFast(unsigned long durationMs) {
unsigned long startTime = millis();
// Active buzzer chỉ cần bật/tắt nhanh
while (millis() - startTime < durationMs) {
digitalWrite(BUZZER_PIN, HIGH);
delay(100);
digitalWrite(BUZZER_PIN, LOW);
delay(100);
}
}
void setup() {
pinMode(LED_RED_PIN, OUTPUT);
pinMode(LED_YELLOW_PIN, OUTPUT);
pinMode(LED_GREEN_PIN, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
pinMode(BUTTON_PIN, INPUT_PULLUP);
digitalWrite(BUZZER_PIN, LOW);
// Trạng thái ban đầu cho xe đi
setLights(false, false, true);
}
void loop() {
// Ghi nhận yêu cầu sang đường
if (digitalRead(BUTTON_PIN) == LOW) {
pedestrianRequest = true;
// chờ nhả nút
while (digitalRead(BUTTON_PIN) == LOW) {
delay(10);
}
}
if (pedestrianRequest) {
// không chuyển đỏ ngay lập tức
setLights(false, false, true);
delay(2000);
// đèn vàng báo chuẩn bị dừng
setLights(false, true, false);
delay(2000);
// đèn đỏ cho người đi bộ qua
setLights(true, false, false);
// buzzer kêu nhanh trong thời gian sang đường
beepFast(5000);
// quay lại xanh
setLights(false, false, true);
pedestrianRequest = false;
}
delay(20);
}