//PARAMETRO REGOLABILE
int tempset = 450; //piu alzi il valore piu raffredda
int templimit = 200;
int timer1 = 60; //errore temperatura e cicalino dopo questi secondi dalla soglia superata
int delayrestart = 10;
int temp = 0;
int motoron = 0;
int motoroff = 0;
int memon = 0; //non usato
int delayon = 0;
int startok = 1;
int delaytime = 0;
int delaycounter = 0;
int firston = 0;
int temperror = 0;
int temperror1 = 0;
int temperrordelay = 0;
long startuptime = 0;
int cycleon = 0;
int firststart = 0;
int nodelay=0;
#define motor 2
#define buzzer 3
#define tc A0
//MILLIS
//millis0- LETTURA TC
unsigned long previousMillis0 = 0;
unsigned long interval0 = 1000;
//millis1- TIMER RIPARTENZA
unsigned long previousMillis1 = 0;
unsigned long interval1 = 1000;
//millis2- PRIMO AVVIO
unsigned long previousMillis2 = 0;
unsigned long interval2 = 1000;
//millis2- RITARDO ALLARME TEMPERATURA BASSA
unsigned long previousMillis3 = 0;
unsigned long interval3 = 1000;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(motor, OUTPUT);
pinMode(buzzer, OUTPUT);
pinMode(tc, INPUT);
}
void loop() {
if (startuptime < 71000) {
startuptime++;
}
if (startuptime > 70000) {
cycleon = 2;
}
if (cycleon == 2) {
// RICONOSCIMENTO PRIMO AVVIO
if (firston == 0){
nodelay =1;
}
if (millis() - previousMillis0 > interval0) {
previousMillis0 = millis();
Serial.println(temp, DEC);
//Serial.println(firston, DEC);
//Serial.println(startuptime, DEC);
}
if (temp < tempset && startok == 1 && (delayon == 0 || nodelay ==1) && temp < 1000 && temp > 5) {
motoron = 1;
digitalWrite(motor, 1);
previousMillis1 = 0;
delaytime = 0;
delayon = 0;
} else {
digitalWrite(motor, 0);
motoroff = 1;
motoron = 0;
nodelay=0;
}
if (motoron ==1 && firston <200){
firston++;
}
//TIMER RIPARTENZA MOTORE
if (firston > 0 && motoron == 0 && motoroff == 1 && delaytime < delayrestart) {
delayon = 1;
if (delayon == 1) {
if (millis() - previousMillis1 > interval1) {
previousMillis1 = millis();
delaytime++;
Serial.print("Attesa ripartenza - ");
Serial.println(delaytime, DEC);
}
}
if (delayrestart == delaytime) {
startok = 1;
delayon = 0;
}
}
//-----------------------------------------------------------------SICUREZZE
//TC ROTTA O SCOLLEGATA
if (temp >= 1000 || temp < 5) {
digitalWrite(buzzer, 1);
} else {
if (temperror == 0) {
digitalWrite(buzzer, 0);
}
}
// ALLARME TEMPERATURA TROPPO ALTA
if (firststart == 5400 && (temp > templimit)) {
temperrordelay = 1;
} else {
temperrordelay = 0;
delaycounter = 0;
temperror1 = 0;
}
if (temperrordelay == 1 && delaycounter < timer1) {
if (millis() - previousMillis3 > interval3) {
previousMillis3 = millis();
delaycounter++;
}
}
if (delaycounter == timer1) {
temperror1 = 1;
}
if (temperror1 == 1) {
digitalWrite(motor, 0);
digitalWrite(buzzer, 1);
temperror = 1;
} else {
temperror = 0;
if (temp < templimit) {
digitalWrite(buzzer, 0);
}
}
//INIBIZIONE ALLARME PRIMO AVVIO,5400 1he30 prima di concedere allarme bassa temperatura
//Parametro da inserire anche sopra !! Nella sezione sicurezze
if (firststart < 5400) {
if (millis() - previousMillis2 > interval2) {
previousMillis2 = millis();
firststart++;
}
}
//LETTURA TERMOCOPPIA , messa qui per evitare falsa accensione motore all'avvio scheda!
temp = analogRead(tc);
}
}