#include <Arduino.h>
#define BUTTON_COUNT 9
#define RELAY_COUNT 8
#define LED_COUNT 8
int button_pins[BUTTON_COUNT] = {15, 2, 4, 5, 18, 19, 21, 22, 23};
int relay_pins[RELAY_COUNT] = {13, 12, 14, 27, 26, 25, 33, 32};
int led_pins[LED_COUNT] = {13, 12, 14, 27, 26, 25, 33, 32};
int relay_states[RELAY_COUNT] = {0}; // Inisialisasi keadaan relay, semua OFF
bool ledsAutoExecuted = false; // Variabel flag
void setup() {
Serial.begin(115200);
for (int i = 0; i < BUTTON_COUNT; i++) {
pinMode(button_pins[i], INPUT_PULLUP);
}
for (int i = 0; i < RELAY_COUNT; i++) {
pinMode(relay_pins[i], OUTPUT);
digitalWrite(relay_pins[i], relay_states[i]); // Inisialisasi keadaan relay
}
for (int i = 0; i < LED_COUNT; i++) {
pinMode(led_pins[i], OUTPUT);
digitalWrite(led_pins[i], LOW); // Inisialisasi keadaan LED
}
}
void loop() {
// Jalankan kontrol LED otomatis hanya jika belum dijalankan
if (!ledsAutoExecuted) {
controlLEDsAuto();
ledsAutoExecuted = true; // Set flag agar tidak dijalankan lagi
}
for (int i = 0; i < BUTTON_COUNT; i++) {
if (digitalRead(button_pins[i]) == LOW) {
delay(200);
if (i < RELAY_COUNT) {
controlRelay(i);
} else {
controlLEDs();
}
}
}
}
void controlRelay(int relayIndex) {
relay_states[relayIndex] = !relay_states[relayIndex];
digitalWrite(relay_pins[relayIndex], relay_states[relayIndex]);
Serial.print("Relay ");
Serial.print(relayIndex + 1);
Serial.print(" State = ");
Serial.println(relay_states[relayIndex]);
delay(50);
}
void controlLEDs() {
for (int i = 0; i < LED_COUNT; i++) {
digitalWrite(led_pins[i], HIGH); // Nyalakan satu persatu LED
delay(500);
}
for (int i = 0; i < LED_COUNT; i++) {
digitalWrite(led_pins[i], LOW); // Padamkan satu persatu LED
delay(500);
}
for (int i = 0; i < LED_COUNT; i++) {
digitalWrite(led_pins[i], HIGH); // Nyalakan semua LED
}
delay(1000); // Tahan selama 1 detik
for (int i = 0; i < LED_COUNT; i++) {
digitalWrite(led_pins[i], LOW); // Padamkan semua LED
}
delay(1000); // Tahan selama 1 detik
}
void controlLEDsAuto() {
for (int i = 0; i < LED_COUNT; i++) {
digitalWrite(led_pins[i], HIGH); // Nyalakan satu persatu LED
delay(500);
}
for (int i = 0; i < LED_COUNT; i++) {
digitalWrite(led_pins[i], LOW); // Padamkan satu persatu LED
delay(500);
}
for (int i = 0; i < LED_COUNT; i++) {
digitalWrite(led_pins[i], HIGH); // Nyalakan semua LED
}
delay(1000); // Tahan selama 1 detik
for (int i = 0; i < LED_COUNT; i++) {
digitalWrite(led_pins[i], LOW); // Padamkan semua LED
}
delay(1000); // Tahan selama 1 detik
}