// Pin untuk saklar
const int saklar1Pin = 2;
const int saklar2Pin = 3;
const int saklar3Pin = 4;
const int saklar4Pin = 5;
const int saklar5Pin = 6;
const int saklar6Pin = 7;
// Variabel untuk status saklar dan waktu
bool status1 = false;
bool ss1 = false;
unsigned long previousMillis1 = 0;
const long interval1 = 1000; // 2 detik
bool status2 = false;
bool ss2 = false;
unsigned long previousMillis2 = 0;
const long interval2 = 1000; // 2 detik
bool status3 = false;
bool ss3 = false;
unsigned long previousMillis3 = 0;
const long interval3 = 1000; // 2 detik
void setup() {
// Konfigurasi pin saklar sebagai input
pinMode(saklar1Pin, INPUT_PULLUP);
pinMode(saklar2Pin, INPUT_PULLUP);
pinMode(saklar3Pin, INPUT_PULLUP);
pinMode(saklar4Pin, INPUT_PULLUP);
pinMode(saklar5Pin, INPUT_PULLUP);
pinMode(saklar6Pin, INPUT_PULLUP);
// Memulai komunikasi serial (opsional, untuk debugging)
Serial.begin(9600);
}
void loop() {
// Membaca input saklar
int s1 = digitalRead(saklar1Pin);
int s2 = digitalRead(saklar2Pin);
int s3 = digitalRead(saklar3Pin);
int s4 = digitalRead(saklar4Pin);
int s5 = digitalRead(saklar5Pin);
int s6 = digitalRead(saklar6Pin);
Serial.print(status1);
Serial.print(" ");
Serial.print(status2);
Serial.print(" ");
Serial.print(status3);
Serial.println();
// Jika saklar ditekan, set status ke TRUE
if (s1 == 0) {
status1 = true;
Serial.println("Status 1 TRUE");
}
if (s2 == 0) {
status2 = true;
Serial.println("Status 2 TRUE");
}
if (s3 == 0) {
status3 = true;
Serial.println("Status 3 TRUE");
}
// Jika saklar 4, 5, atau 6 ditekan, mulai hitung mundur untuk reset status
if (s4 == 0) {
previousMillis1 = millis();
Serial.println("Status 1 akan FALSE dalam 2 detik");
ss1 = true;
}
if (s5 == 0) {
previousMillis2 = millis();
Serial.println("Status 2 akan FALSE dalam 2 detik");
ss2 = true;
}
if (s6 == 0) {
previousMillis3 = millis();
Serial.println("Status 3 akan FALSE dalam 2 detik");
ss3 = true;
}
// Panggil fungsi reset untuk cek waktu dan reset status
reset();
delay(20);
}
// Fungsi reset yang akan mengecek apakah waktu sudah habis dan mengubah status
void reset() {
unsigned long currentMillis = millis();
// Reset status1
if (ss1 == true && (currentMillis - previousMillis1 >= interval1)) {
if (status1 == true) {
status1 = false;
Serial.println("Status 1 FALSE");
ss1 = false;
}
}
// Reset status2
if (ss2 == true && (currentMillis - previousMillis2 >= interval2)) {
if (status2 == true) {
status2 = false;
Serial.println("Status 2 FALSE");
ss2 = false;
}
}
// Reset status3
if (ss3 == true && (currentMillis - previousMillis3 >= interval3)) {
if (status3 == true) {
status3 = false;
Serial.println("Status 3 FALSE");
ss3 = false;
}
}
}