int relay1Pin = 2;
int relay2Pin = 3;
int relay3Pin = 4;
int relay4Pin = 5;
int stopButton = 8;
int startButton = 9;
bool isRunning = false; // Başlangıçta çalışmıyoruz
//state machine var
byte runState = 0;
//millis timer for states..
unsigned long lastChange = 0;
unsigned int intervalChange = 10000;
//millis timer for button debouncing..
unsigned long lastDebounce = 0;
int intervalDebounce = 50;
void setup() {
pinMode(stopButton, INPUT_PULLUP);
pinMode(startButton, INPUT_PULLUP);
pinMode(relay1Pin, OUTPUT);
pinMode(relay2Pin, OUTPUT);
pinMode(relay3Pin, OUTPUT);
pinMode(relay4Pin, OUTPUT);
digitalWrite(relay1Pin, HIGH);
digitalWrite(relay2Pin, HIGH);
digitalWrite(relay3Pin, HIGH);
digitalWrite(relay4Pin, HIGH);
Serial.begin(9600); // Seri portu başlat
}
void loop() {
// Start düğmesine basıldığında röleleri çalıştır
if (digitalRead(startButton) == LOW) {
if (millis() - lastDebounce >= intervalDebounce) {
lastDebounce = millis();
if (!isRunning) {
isRunning = true;
//reset state machine
runState = 0;
Serial.println("Röleler çalıştırılıyor...");
}
}
}
// Stop düğmesine basıldığında röleleri durdur
if (digitalRead(stopButton) == LOW) {
if (millis() - lastDebounce >= intervalDebounce) {
lastDebounce = millis();
if (isRunning) {
isRunning = false;
digitalWrite(relay1Pin, HIGH);
digitalWrite(relay2Pin, HIGH);
digitalWrite(relay3Pin, HIGH);
digitalWrite(relay4Pin, HIGH);
Serial.println("Röleler durduruldu.");
}
}
}
if (isRunning) {
switch (runState) {
case 0: digitalWrite(relay1Pin, LOW);
digitalWrite(relay2Pin, LOW);
runState = 1;
//set the timer interval
intervalChange = 10000;
//set the timer millis
lastChange = millis();
break;
case 1: if (millis() - lastChange >= intervalChange) {
runState = 2;
}
break;
case 2: digitalWrite(relay1Pin, HIGH);
digitalWrite(relay2Pin, HIGH);
runState = 3;
//set the timer interval
intervalChange = 5000;
//set the timer millis
lastChange = millis();
break;
case 3: if (millis() - lastChange >= intervalChange) {
runState = 4;
}
break;
case 4: digitalWrite(relay3Pin, LOW);
digitalWrite(relay4Pin, LOW);
runState = 5;
//set the timer interval
intervalChange = 10000;
//set the timer millis
lastChange = millis();
break;
case 5: if (millis() - lastChange >= intervalChange) {
runState = 6;
}
break;
case 6: digitalWrite(relay3Pin, HIGH);
digitalWrite(relay4Pin, HIGH);
runState = 7;
//set the timer interval
intervalChange = 5000;
//set the timer millis
lastChange = millis();
break;
case 7: if (millis() - lastChange >= intervalChange) {
//start over??
runState = 0;
}
break;
}
}
/*
// Röleleri çalıştırma durumunda
if (isRunning) {
digitalWrite(relay1Pin, LOW);
digitalWrite(relay2Pin, LOW);
delay(10000);
digitalWrite(relay1Pin, HIGH);
digitalWrite(relay2Pin, HIGH);
delay(5000);
digitalWrite(relay3Pin, LOW);
digitalWrite(relay4Pin, LOW);
delay(10000);
digitalWrite(relay3Pin, HIGH);
digitalWrite(relay4Pin, HIGH);
delay(5000);
}
*/
}