const int ledPins[] = {2, 4, 5, 12, 13, 14, 15, 16}; // Các chân GPIO cho LED
const int buttonPin = 18; // Chân GPIO cho nút nhấn
int Mode = 0; // Chỉ số hiệu ứng hiện tại
int Nhan = 0; // Trạng thái nút nhấn (0: không nhấn, 1: đã nhấn)
void setup() {
// Khởi tạo các chân LED là OUTPUT
for (int i = 0; i < 8; i++) {
pinMode(ledPins[i], OUTPUT);
}
// Khởi tạo chân nút nhấn là INPUT_PULLUP
pinMode(buttonPin, INPUT_PULLUP);
}
void loop() {
// Kiểm tra trạng thái nút nhấn
if (digitalRead(buttonPin) == LOW) {
delay(20);
if (digitalRead(buttonPin) == LOW && Nhan == 0) { // Xác nhận nút nhấn được bấm
Nhan = 1;
Mode = (Mode + 1) % 4; // Tăng hiệu ứng và quay lại từ đầu sau khi hết
}
} else {
Nhan = 0; // Đặt lại trạng thái khi nút không được bấm
}
// Chọn hiệu ứng theo giá trị của Mode
switch (Mode) {
case 0:
// Hiệu ứng 1: Nhấp nháy toàn bộ LED 10 lần
for (int j = 0; j < 10; j++) {
for (int i = 0; i < 8; i++) {
digitalWrite(ledPins[i], HIGH);
}
delay(200);
for (int i = 0; i < 8; i++) {
digitalWrite(ledPins[i], LOW);
}
delay(200);
}
break;
case 1:
// Hiệu ứng 2: Sáng dần từ trái sang phải
for (int i = 0; i < 8; i++) {
digitalWrite(ledPins[i], HIGH); // Bật LED từ trái sang phải
delay(500);
}
delay(500); // Giữ trạng thái sáng trong một khoảng thời gian
break;
case 2:
// Hiệu ứng 3: Tắt dần từ trái sang phải
for (int i = 0; i < 8; i++) {
digitalWrite(ledPins[i], LOW); // Tắt LED từ trái sang phải
delay(500);
}
delay(500); // Giữ trạng thái tắt trong một khoảng thời gian
break;
case 3:
// Hiệu ứng 4: Sáng dồn từ trong ra ngoài
for (int i = 0; i < 4; i++) {
digitalWrite(ledPins[3 - i], HIGH); // Bật LED từ trung tâm ra ngoài (trái)
digitalWrite(ledPins[4 + i], HIGH); // Bật LED từ trung tâm ra ngoài (phải)
delay(500);
}
delay(500); // Giữ tất cả các LED sáng trong một khoảng thời gian
}
}