const int ledPin[] = {6, 7, 8, 9, 10, 11, 12, 13};
const int buttonPin = 2; // Nút nhấn được nối vào chân số 2
volatile int mode = 0; // Biến lưu chế độ hiện tại
int i;
unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 200; // Thời gian debounce (ms)
void setup() {
for (i = 0; i < 8; i++) {
pinMode(ledPin[i], OUTPUT);
}
pinMode(buttonPin, INPUT_PULLUP); // Nút nhấn nối với GND, nên sử dụng INPUT_PULLUP
attachInterrupt(digitalPinToInterrupt(buttonPin), changeMode, FALLING);
}
void loop() {
switch (mode) {
case 0:
mode0();
break;
case 1:
mode1();
break;
case 2:
mode2();
break;
case 3:
mode3();
break;
}
}
void changeMode() {
unsigned long currentTime = millis();
// Kiểm tra nếu thời gian hiện tại - thời gian lần cuối nhấn nút > debounceDelay
if ((currentTime - lastDebounceTime) > debounceDelay) {
mode = (mode + 1) % 4; // Chuyển đổi giữa 4 chế độ
lastDebounceTime = currentTime; // Cập nhật thời gian lần cuối nhấn nút
}
}
// Chế độ 0: Tất cả LED tắt
void mode0() {
for (i = 0; i < 8; i++) {
digitalWrite(ledPin[i], LOW);
}
}
// Chế độ 0: Tất cả LED bật tắt cùng lúc
void mode1() {
for (i = 0; i < 8; i++) {
digitalWrite(ledPin[i], HIGH);
}
delay(500);
for (i = 0; i < 8; i++) {
digitalWrite(ledPin[i], LOW);
}
delay(500);
}
// Chế độ 1: Các LED chẵn lẻ bật tắt xen kẽ
void mode2() {
for (i = 0; i < 8; i++) {
if (i % 2 == 0) {
digitalWrite(ledPin[i], HIGH);
}
}
delay(500);
for (i = 0; i < 8; i++) {
if (i % 2 == 0) {
digitalWrite(ledPin[i], LOW);
}
}
delay(500);
for (i = 0; i < 8; i++) {
if (i % 2 != 0) {
digitalWrite(ledPin[i], HIGH);
}
}
delay(500);
for (i = 0; i < 8; i++) {
if (i % 2 != 0) {
digitalWrite(ledPin[i], LOW);
}
}
delay(500);
}
// Chế độ 2: Bật tắt LED từ ngoài vào trong
void mode3() {
for (i = 0; i < 4; i++) {
digitalWrite(ledPin[i], HIGH);
digitalWrite(ledPin[7-i], HIGH);
delay(500);
}
for (i = 3; i >= 0; i--) {
digitalWrite(ledPin[i], LOW);
digitalWrite(ledPin[7-i], LOW);
delay(500);
}
}