non riesco a capire bene come funzioni Switch/case in arduino
Come il codice del post #16
ho provato ad implementare lo stato WAIT_NO_COMMAND, non sono sicuro di aver fatto bene
Il caso WAIT_NO_COMMAND serve solo ad attendere che l'interruttore sia portato nello stato non attivo se per caso non lo è già.
case WAIT_NO_COMMAND:
if (digitalRead(SWITCHPIN) == LOW) state = ONIDLE;
break;
IL commento "stato che memorizza il case eseguito" sarebbe più corretto: "variabile che memorizza lo stato corrente", di fatto lo stato corrente corrisponde al case eseguito.
Se durante la pausa serve anche mantenere la pressione tramite "rabbocchi" allora bisogna aggiungere uno stato REFILL, e si potrà andare avanti e indietro diverse volte tra i due stati PAUSA e REFILL a seconda del valore letto della pressione.
Con la logica ci sei quasi, in ogni case un if corrisponde a un evento che si vuole gestire, e il contenuto dell'if alle azioni in risposta all'evento. Lo stop sgonfiaggio va dentro il caso DEFLATE, non dentro il WAIT_NO_COMMAND.
case DEFLATE:
if(raggiunta la pressione minima nel manicotto) { // <----EVENTO
digitalWrite(INTELVALVEPIN, LOW); // <----AZIONI
digitalWrite(PUMPPIN, LOW);
digitalWrite(EXAUSTVALVEPIN, LOW);
digitalWrite(LED, LOW);
state = WAIT_NO_COMMAND;
}
break;
Non serve (anzi non si deve) usare delay da nessuna parte, altrimenti l'esecuzione dei casi si blocca.