// Pin untuk relay
const int relay1 = 2;
const int relay2 = 3;
const int relay3 = 4;
// Pin untuk tombol
const int buttonPin = A0;
// Variabel untuk status tombol dan waktu
bool buttonPressed = false;
unsigned long lastButtonPressTime = 0;
unsigned long animationEndTime = 0;
const unsigned long timeout = 5000; // 30 detik
void setup() {
// Inisialisasi serial monitor
Serial.begin(9600);
Serial.println(F("MANDOZAF RELAY RANDOM"));
Serial.println(F("by MANDOZAF"));
Serial.println();
// Inisialisasi pin relay sebagai output
pinMode(relay1, OUTPUT);
pinMode(relay2, OUTPUT);
pinMode(relay3, OUTPUT);
// Inisialisasi pin tombol sebagai input
pinMode(buttonPin, INPUT_PULLUP);
// Matikan semua relay di awal
digitalWrite(relay1, LOW);
digitalWrite(relay2, LOW);
digitalWrite(relay3, LOW);
}
void loop() {
// Baca status tombol
if (digitalRead(buttonPin) == LOW) {
if (!buttonPressed) {
buttonPressed = true;
startAnimation();
}
} else {
buttonPressed = false;
}
// Cek apakah tombol tidak ditekan dalam waktu 30 detik setelah animasi selesai
if (millis() - animationEndTime >= timeout && animationEndTime != 0) {
// Matikan semua relay jika tidak ada interaksi selama 30 detik setelah animasi
turnOffAllRelays();
animationEndTime = 0; // Reset timer
}
}
void startAnimation() {
for (int i = 0; i < 20; i++) { // Jumlah iterasi animasi
int randomRelay = random(1, 4); // Pilih relay secara acak antara 1 hingga 3
turnOnRelay(randomRelay);
delay(200); // Waktu delay statis antara perubahan relay
turnOffAllRelays();
}
// Aktifkan relay secara acak dan tetap hidup
int finalRelay = random(1, 4);
turnOnRelay(finalRelay);
// Setelah animasi selesai, mulai hitung waktu untuk timeout
animationEndTime = millis();
}
void turnOnRelay(int relayNumber) {
switch (relayNumber) {
case 1:
digitalWrite(relay1, HIGH);
Serial.println("Lampu 1 menyala");
break;
case 2:
digitalWrite(relay2, HIGH);
Serial.println("Lampu 2 menyala");
break;
case 3:
digitalWrite(relay3, HIGH);
Serial.println("Lampu 3 menyala");
break;
default:
// Jika ada nilai yang tidak dikenal, matikan semua relay
turnOffAllRelays();
Serial.println("Semua lampu mati");
break;
}
}
void turnOffAllRelays() {
digitalWrite(relay1, LOW);
digitalWrite(relay2, LOW);
digitalWrite(relay3, LOW);
Serial.println("Semua lampu mati");
}