int red1 = 5;
int yellow1 = 6;
int green1 = 7;
int red2 = 2;
int yellow2 = 3;
int green2 = 4;
int buttonPin = 10; // Chân nút nhấn
bool lightsPaused = false; // Trạng thái tạm dừng của đèn
unsigned long lastButtonPress = 0; // Biến để lưu thời điểm cuối cùng nút được nhấn
unsigned long debounceDelay = 50; // Thời gian chờ để loại bỏ nhấn nút giả
#include <TM1637Display.h>
#define TEST_DELAY 2000
TM1637Display display1(9, 8);
TM1637Display display2(A0, A1);
void setup() {
display1.clear();
display1.setBrightness(7);
display2.clear();
display2.setBrightness(7);
for (int i = 2; i < 10; i++) {
pinMode(i, OUTPUT);
}
pinMode(buttonPin, INPUT_PULLUP); // Thiết lập chân của nút nhấn là input và sử dụng nội kéo lên
}
void loop() {
// Đọc trạng thái của nút nhấn
int buttonState = digitalRead(buttonPin);
// Kiểm tra xem đã đủ thời gian chờ để xác định xem nút nhấn có thực sự được nhấn không
if (buttonState == LOW && (millis() - lastButtonPress) > debounceDelay) {
// Cập nhật thời điểm cuối cùng nút được nhấn
lastButtonPress = millis();
// Đảo ngược trạng thái tạm dừng của đèn
lightsPaused = !lightsPaused;
// Nếu đèn được tạm dừng, thì tắt tất cả các đèn
if (lightsPaused) {
digitalWrite(red1, LOW);
digitalWrite(yellow1, LOW);
digitalWrite(green1, LOW);
digitalWrite(red2, LOW);
digitalWrite(yellow2, LOW);
digitalWrite(green2, LOW);
}
}
// Chỉ chạy các đoạn mã dưới đây nếu đèn không bị tạm dừng
if (!lightsPaused) {
for (int i = 15; i >= 0; i -= 1) {
int j = i - 3;
digitalWrite(green1, LOW);
digitalWrite(yellow1, LOW);
digitalWrite(red1, HIGH);
display1.showNumberDec(i, true, 2, 2);
if (i >= 4) {
digitalWrite(green2, HIGH);
digitalWrite(yellow2, LOW);
digitalWrite(red2, LOW);
display2.showNumberDec(j, true, 2, 2);
} else {
digitalWrite(green2, LOW);
digitalWrite(yellow2, HIGH);
digitalWrite(red2, LOW);
display2.showNumberDec(i, true, 2, 2);
}
delay(1000);
}
for (int i = 15; i >= 0; i -= 1) {
int j = i - 3;
digitalWrite(green2, LOW);
digitalWrite(yellow2, LOW);
digitalWrite(red2, HIGH);
display2.showNumberDec(i, true, 2, 2);
if (i >= 4) {
digitalWrite(green1, HIGH);
digitalWrite(yellow1, LOW);
digitalWrite(red1, LOW);
display1.showNumberDec(j, true, 2, 2);
} else {
digitalWrite(green1, LOW);
digitalWrite(yellow1, HIGH);
digitalWrite(red1, LOW);
display1.showNumberDec(i, true, 2, 2);
}
delay(1000);
}
}
}