Hi,
I want the code below to work like this;
1- Press the start button and sicaklik_role is activated and the cycle starts after the thermocouple reaches 40 degrees. (I'm going briefly)
2- After the cycle is finished, the warning_led turns HIGH and a message about the end of the cycle appears on the serial port screen. ( Serial.println("Döngü tamamlandı."); )
So what do I want next, after the loop ends, I want the loop to run for the specified time (10 seconds) when I press the start button again after the uyari_led goes to HIGH state. So I want it to be like starting over. After the loop is finished, if I press the stop button and then press the start button again, the uyari_led goes HIGH and I get a message that the loop is over on the serial port screen. But if I press the stop button and wait for 20 seconds and press the start button again, the loop starts from the beginning as I want. I've been trying to solve this for a few days but I can't. Can anyone help?
#include <max6675.h>
#include <DHT.h>
#define DHTPIN 13
#define DHTTYPE DHT22
int relay1Pin = 2;
int relay2Pin = 3;
int relay3Pin = 4;
int relay4Pin = 5;
int sicaklik_role = 6;
int thermoDO = 7;
int thermoCS = 8;
int thermoCLK = 9;
int stopButton = 11;
int startButton = 10;
int fan_role = 12;
int uyari_led = A0;
const int isiticiac = 40;
const int isiticikapat = 50;
const int donmeye_basla = 40;
bool isRunning = false;
byte runState = 0;
unsigned long lastChange = 0;
unsigned long intervalChange = 10000;
unsigned long lastDebounce = 0;
int intervalDebounce = 50;
bool isitici_bekleme = false;
bool nem_alici = false;
bool isinmadan_baslama = false;
MAX6675 thermocouple(thermoCLK, thermoCS, thermoDO);
DHT dht(DHTPIN, DHTTYPE);
unsigned long startTime = 0; // Başlangıç zamanı
void setup() {
pinMode(uyari_led, OUTPUT);
pinMode(fan_role, OUTPUT);
pinMode(stopButton, INPUT_PULLUP);
pinMode(startButton, INPUT_PULLUP);
pinMode(relay1Pin, OUTPUT);
pinMode(relay2Pin, OUTPUT);
pinMode(relay3Pin, OUTPUT);
pinMode(relay4Pin, OUTPUT);
pinMode(sicaklik_role, OUTPUT);
digitalWrite(fan_role, HIGH);
digitalWrite(sicaklik_role, HIGH);
digitalWrite(relay1Pin, HIGH);
digitalWrite(relay2Pin, HIGH);
digitalWrite(relay3Pin, HIGH);
digitalWrite(relay4Pin, HIGH);
dht.begin();
Serial.begin(9600);
startTime = millis(); // Başlangıç zamanını ayarla
}
void loop() {
float nem = dht.readHumidity();
double temperature = thermocouple.readCelsius();
Serial.print("Ortam nem: ");
Serial.print(nem);
Serial.print("%");
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println(" °C");
delay(300);
if (digitalRead(startButton) == LOW) {
digitalWrite(sicaklik_role, LOW);
digitalWrite(uyari_led, LOW);
isitici_bekleme = true;
nem_alici = true;
} else if (temperature >= isiticikapat) {
digitalWrite(sicaklik_role, HIGH);
} else if (isitici_bekleme && temperature <= isiticiac) {
digitalWrite(sicaklik_role, LOW);
}
if (isitici_bekleme && temperature <= donmeye_basla) {
startTime = millis();
Serial.println("en baştan başladı");
}
if (nem_alici && nem > 60){
digitalWrite(fan_role, LOW);
}
else if (nem < 60) {
digitalWrite(fan_role, HIGH);
}
if (isitici_bekleme && temperature >= donmeye_basla) {
if (millis() - lastDebounce >= intervalDebounce) {
lastDebounce = millis();
if (!isRunning) {
isRunning = true;
runState = 0;
Serial.println("Röleler çalıştırılıyor...");
}
}
}
if (digitalRead(stopButton) == LOW) {
isitici_bekleme = false;
isRunning = false;
nem_alici = false;
isinmadan_baslama = false;
digitalWrite(relay1Pin, HIGH);
digitalWrite(relay2Pin, HIGH);
digitalWrite(relay3Pin, HIGH);
digitalWrite(relay4Pin, HIGH);
digitalWrite(sicaklik_role, HIGH);
digitalWrite(fan_role, HIGH);
digitalWrite(uyari_led, LOW);
Serial.println("Röleler durduruldu.");
if (millis() - lastDebounce >= intervalDebounce) {
lastDebounce = millis();
if (isRunning) {
isRunning = false;
}
}
}
if (isRunning) {
switch (runState) {
case 0:
digitalWrite(relay1Pin, LOW);
digitalWrite(relay2Pin, LOW);
runState = 1;
intervalChange = 10000;
lastChange = millis();
break;
case 1:
if (millis() - lastChange >= intervalChange) {
runState = 2;
}
break;
case 2:
digitalWrite(relay1Pin, HIGH);
digitalWrite(relay2Pin, HIGH);
runState = 3;
intervalChange = 5000;
lastChange = millis();
break;
case 3:
if (millis() - lastChange >= intervalChange) {
runState = 4;
}
break;
case 4:
digitalWrite(relay3Pin, LOW);
digitalWrite(relay4Pin, LOW);
runState = 5;
intervalChange = 10000;
lastChange = millis();
break;
case 5:
if (millis() - lastChange >= intervalChange) {
runState = 6;
}
break;
case 6:
digitalWrite(relay3Pin, HIGH);
digitalWrite(relay4Pin, HIGH);
runState = 7;
intervalChange = 5000;
lastChange = millis();
break;
case 7:
if (millis() - lastChange >= intervalChange) {
runState = 0;
}
break;
}
}
if (isitici_bekleme && millis() - startTime >= 10L * 1000L) {
isitici_bekleme = false;
isRunning = false;
nem_alici = false;
isinmadan_baslama = false;
digitalWrite(relay1Pin, HIGH);
digitalWrite(relay2Pin, HIGH);
digitalWrite(relay3Pin, HIGH);
digitalWrite(relay4Pin, HIGH);
digitalWrite(sicaklik_role, HIGH);
digitalWrite(fan_role, HIGH);
digitalWrite(uyari_led, HIGH);
Serial.println("Döngü tamamlandı.");
}
}