Ti ho modificato un po il codice! Ma non funziona correttamente
Tu dovresti sostituire i vari if-else if, con altri stati con altri case.
Usa una macchina a stati finiti con quanti stati sono necessari, non usare else if, ma aggiungi altri stati
altri case nello switch();
Gli else if() dovrebbero essere sostituiti con altri case, stati di una macchina a stati finiti!
/* Arduino test iniziale */
#define RIPOSO 0
#define GONFIAGGIO 1
#define PAUSA 2
#define RABBOCCA 3
#define SGONFIAGGIO 4
#define ATTENDI_NO_COMANDO 5
byte stato = RIPOSO; // stato che memorizza il case eseguito
#define SWITCHPIN 2
#define INTELVALVEPIN 6
#define PUMPPIN 5
#define EXHAUSTVALVEPIN 7
#define LED 13
long pressione = 0;
int lettura = 0;
unsigned long tempo=0;
void setup() {
Serial.begin(9600);
pinMode(SWITCHPIN, INPUT);
pinMode(INTELVALVEPIN, OUTPUT);
pinMode(PUMPPIN, OUTPUT);
pinMode(EXHAUSTVALVEPIN, OUTPUT);
pinMode(LED,OUTPUT);
}
void loop() {
switch(stato)
{
case RIPOSO:
if (digitalRead(SWITCHPIN) == HIGH) {
digitalWrite(INTELVALVEPIN, HIGH);
digitalWrite(PUMPPIN, HIGH);
digitalWrite(EXHAUSTVALVEPIN, LOW);
digitalWrite(LED, HIGH);
stato = GONFIAGGIO; // stato che memorizza il case eseguito
}
break;
case GONFIAGGIO:
lettura = analogRead (A0);
pressione = map (lettura,0,1023,0,700000);
if(pressione >= 300){
digitalWrite(INTELVALEPIN, LOW); //fermo
digitalWrite(PUMPPIN, LOW);
digitalWrite(EXHAUSTVALVEPIN, LOW);
digitalWrite(LED, LOW);
Serial.print(pressione);
//annotare tempo da scrivere
stato = PAUSA;
tempo=millis(); // Inizio il conteggio tempo di pausa
}else if(pressione <= Pmax){
Serial.print(pressione);
digitalWrite(INTELVALVEPIN, HIGH); //altrimenti se pressione bassa -> avvia gonfiaggio -> RABBOCCA
digitalWrite(PUMPPIN; HIGH);
digitalWrite(EXHAUSTVALVEPIN, LOW);
digitalWrite(LED, HIGH);
stato = RABBOCCA;
tempo=millis();// tempo per il rabbocco
}
break;
case PAUSA:
lettura = analogRead(A0);
pressione = map (lettura,0,1023,0,700000);
if(millis()-tempo>=5000) { // Al posto di 5000 5 secondi mettere il tempo voluto
digitalWrite(INTELVALVEPIN, LOW);
digitalWrite(PUMPPIN, LOW);
digitalWrite(EXHAUSTVALVEPIN, HIGH);
digitalWrite(LED, LOW);
stato = SGONFIAGGIO;
}
break;
case RABBOCCA:
if(millis()-tempo>=5000) { //se trascorsi N secondi -> avvia sgonfiaggio -> SGONFIAGGIO
digitalWrite(INTELVALVEPIN, LOW);
digitalWrite(PUMPPIN, LOW);
digitalWrite(EXHAUSTVALVEPIN, HIGH);
digitalWrite(LED, LOW);
stato = SGONFIAGGIO;
}
else if(analogRead(A0) >= Pmax){ //altrimenti se pressione massima -> ferma gonfiaggio -> PAUSA
digitalWrite(INTELVALVEPIN, LOW);
digitalWrite(PUMPIN, LOW);
digitalWrite(EXHAUSTVALVEPIN, LOW);
digitalWrite(LED, LOW);
lettura = analogRead(A0);
pressione = map (lettura,0,1023,0,700000);
Serial.print(pressione);
stato = PAUSA;
tempo=millis();
}
break;
case SGONFIAGGIO:
lettura = analogRead(A0);
pressione = map (lettura,0,1023,0,700000)
if(pressione == 0){
digitalWrite(INTELVALVEPIN, LOW);
digitalWrite(PUMPPIN, LOW);
digitalWrite(EXHAUSTVALVEPIN, LOW);
digitalWrite(LED, LOW);
Serial.print(pressione);
stato = ATTENDI_NO_COMANDO;
}
break;
case ATTENDI_NO_COMANDO: //se comando disattivo -> IN_ATTESA
if (digitalRead(SWITCHPIN) != HIGH) stato = RIPOSO;
break;
}
}