//----------------------- versi 2 --- tegangan button ke negatif --------------------------------------
// coba rubah ke negatif
// tambah relay out 1 dan 2
// tambah relay power
// tambah sub untuk menunggu 5 detik off
// penambahan watchdog (belum di tast) --> OK Sudah
// Penambahan 1 sw untuk mode cnt
//-------------------------------------------- Deklarasi pin untuk push button --
#include <avr/wdt.h> // Library untuk watchdog timer
const int sw1 = 4;
const int sw2 = 5;
const int swCnt = 7;
const int swtest = 2;
int cntpwr = 0;
bool cntpwrrun = 0;
//deklarasi millis waktu led blink
int ledPin = 13;
int relay1 = 8;
int relay2 = 9;
int relaypwr = 10;
unsigned long previousMillis = 0; // variabel untuk menyimpan waktu sebelumnya
const long interval = 500;
// Deklarasi variabel untuk menyimpan waktu terakhir tombol ditekan
unsigned long lastDebounceTime = 0;
// Delay debounce (untuk menghindari debounce yang tidak diinginkan)
const unsigned long debounceDelay = 50;
// Deklarasi variabel untuk menyimpan status tombol
int buttonState = 0;
int buttonState2 = 0;
int buttonStateCnt = 0;
int lastButtonState = 0;
int lastButtonState2 = 0;
int lastButtonStateCnt = 0;
int cnt=0;
void setup() {
// Set pin push button sebagai input
pinMode(sw1, INPUT_PULLUP);
pinMode(sw2, INPUT_PULLUP);
pinMode(swCnt, INPUT_PULLUP);
pinMode(swtest, INPUT_PULLUP);
pinMode(ledPin, OUTPUT);
pinMode(relay1, OUTPUT); digitalWrite(relay1, LOW);
pinMode(relay2, OUTPUT); digitalWrite(relay2, LOW);
pinMode(relaypwr, OUTPUT); digitalWrite(relaypwr, LOW);
// Buka serial communication
Serial.begin(9600);
Serial.println("Sistem switch started -----------------");
wdt_enable(WDTO_8S); // Watchdog timeout 8 detik
}
void loop() {
wdt_reset();
//blinking led 500ms
unsigned long currentMillis = millis(); //mengambil waktu saat ini
if (currentMillis - previousMillis >= interval) { //jika interval waktu sudah berlalu
previousMillis = currentMillis; //simpan waktu sekarang sebagai waktu sebelumnya
digitalWrite(ledPin, !digitalRead(ledPin));//nyalakan ledPin
if(cntpwrrun){cntpwr++;}
}
// ------------------------------------------ Baca status tombol 1 - Indoor
int reading = digitalRead(sw1);
// Cek apakah status tombol berbeda dari sebelumnya
if (reading != lastButtonState) {
lastDebounceTime = millis();
}
// Delay untuk debounce
if ((millis() - lastDebounceTime) > debounceDelay) {
if (reading != buttonState) {
buttonState = reading;
if (buttonState == LOW) {
Serial.println("Sw Indoor");
digitalWrite(relay1,(!digitalRead(relay1)));
}
}
}
// Simpan status tombol untuk pengecekan selanjutnya
lastButtonState = reading;
// ------------------------------------------ Baca status tombol 2 - Outdoor
int reading2 = digitalRead(sw2);
// Cek apakah status tombol berbeda dari sebelumnya
if (reading2 != lastButtonState2) {
lastDebounceTime = millis();
}
// Delay untuk debounce
if ((millis() - lastDebounceTime) > debounceDelay) {
if (reading2 != buttonState2) {
buttonState2 = reading2;
if (buttonState2 == LOW) {
Serial.println("Sw Outdoor");
digitalWrite(relay2,(!digitalRead(relay2)));
}
}
}
// Simpan status tombol untuk pengecekan selanjutnya
lastButtonState2 = reading2;
// ------------------------------------------ Baca status tombol 3 - In Out sw
int readingCnt = digitalRead(swCnt);
// Cek apakah status tombol berbeda dari sebelumnya
if (readingCnt != lastButtonStateCnt) {
lastDebounceTime = millis();
}
// Delay untuk debounce
if ((millis() - lastDebounceTime) > debounceDelay) {
if (readingCnt != buttonStateCnt) {
buttonStateCnt = readingCnt;
if (buttonStateCnt == LOW) {
cnt++; if(cnt>=4){cnt=0;}
Serial.print("Sw Cnt = "); Serial.println(cnt);
if(cnt==0){digitalWrite(relay1, LOW); digitalWrite(relay2, LOW);}
if(cnt==1){digitalWrite(relay1, HIGH); digitalWrite(relay2, LOW);}
if(cnt==2){digitalWrite(relay1, LOW); digitalWrite(relay2, HIGH);}
if(cnt==3){digitalWrite(relay1, HIGH); digitalWrite(relay2, HIGH);}
// digitalWrite(relay2,(!digitalRead(relay2)));
}
}
}
// Simpan status tombol untuk pengecekan selanjutnya
lastButtonStateCnt = readingCnt;
//----------------------------- cek relay power
//
if(digitalRead(relay1)||digitalRead(relay2)){digitalWrite(relaypwr,HIGH);cntpwr=0;cntpwrrun=0;}
else{
cntpwrrun=1;
if(cntpwr>(10)){ // Delay On = ... x 0.5 detik
digitalWrite(relaypwr,LOW);
cntpwrrun=0;
}
}
//if(!digitalRead(swtest)){Serial.println("Delay 10S");delay(10000);} // wdt test
delay(20);
}
/*
//----------------------- versi 1 --- tegangan button ke positif --------------------------------------
//-------------------------------------------- Deklarasi pin untuk push button --
const int pushButtonPin = 4;
//deklarasi millis waktu led blink
int ledPin = 13;
unsigned long previousMillis = 0; // variabel untuk menyimpan waktu sebelumnya
const long interval = 500;
// Deklarasi variabel untuk menyimpan waktu terakhir tombol ditekan
unsigned long lastDebounceTime = 0;
// Delay debounce (untuk menghindari debounce yang tidak diinginkan)
const unsigned long debounceDelay = 50;
// Deklarasi variabel untuk menyimpan status tombol
int buttonState = 0;
int lastButtonState = 0;
long int a=99995;
void setup() {
// Set pin push button sebagai input
pinMode(pushButtonPin, INPUT);
pinMode(ledPin, OUTPUT);
// Buka serial communication
Serial.begin(9600);
}
void loop() {
//blinking led 500ms
unsigned long currentMillis = millis(); //mengambil waktu saat ini
if (currentMillis - previousMillis >= interval) { //jika interval waktu sudah berlalu
previousMillis = currentMillis; //simpan waktu sekarang sebagai waktu sebelumnya
digitalWrite(ledPin, !digitalRead(ledPin));//nyalakan ledPin
}
// Baca status tombol
int reading = digitalRead(pushButtonPin);
// Cek apakah status tombol berbeda dari sebelumnya
if (reading != lastButtonState) {
lastDebounceTime = millis();
}
// Delay untuk debounce
if ((millis() - lastDebounceTime) > debounceDelay) {
if (reading != buttonState) {
buttonState = reading;
if (buttonState == HIGH) {
a=a+1;
Serial.println(a);
}
}
}
// Simpan status tombol untuk pengecekan selanjutnya
lastButtonState = reading;
}
*/
Relay Pwr
Aktif
Indoor
Outdoor