//------------------------------------------------------
// test https://forum.arduino.cc/t/start-programma-stop-e-memoria-posizione/1200110/1
//------------------------------------------------------
#define START A0 // pull-down normalmente 0 (contatto NO)
#define STOP A1 // pull-down normalmente 1 (contatto NC)
byte fase = 0;
byte ripetizioni = 0;
//==============================================
// delay interrompibile, dt in secondi
bool dly(int dt) {
for (int n=0; n<(dt*100); n++) {
delay(10);
if (1==fase && digitalRead(STOP)==0) {
fase = 2;
return 1;
}
}
return 0;
}
//==============================================
void setup() {
Serial.begin(115200);
pinMode(START, INPUT);
pinMode(STOP, INPUT);
}
void loop() {
switch(fase) {
case 0: // attesa avvio
if (digitalRead(START)==1) {
Serial.println("Avvio sequenza");
if (0 == ripetizioni) ripetizioni = 5;
fase = 1;
}
break;
case 1: // esecuzione sequenze
Serial.println("------------------------");
Serial.print("Inizio ciclo: -");
Serial.println(ripetizioni);
Serial.println("------------------------");
Serial.println("ASPIRAZIONE");
Serial.println(" Apri valvola aspirazione");
if (dly(1)) break;
Serial.println(" Accendi pompa vuoto");
if (dly(1)) break;
Serial.println(" Chiudi valvola aspirazione");
if (dly(1)) break;
Serial.println(" Spegni pompa vuoto");
if (dly(1)) break;
Serial.println("SCARICO ARIA");
Serial.println(" Apri valvola scarico aria");
if (dly(1)) break;
Serial.println(" Chiudi valvola scarico aria");
if (dly(1)) break;
Serial.println("RIEMPIMENTO");
Serial.println(" Apri valvola carico olio");
if (dly(1)) break;
Serial.println(" Chiudi valvola carico olio");
if (dly(1)) break;
Serial.println("SCARICO ARIA");
Serial.println(" Apri valvola scarico aria");
if (dly(1)) break;
Serial.println(" Chiudi valvola scarico aria");
if (dly(1)) break;
ripetizioni--;
if (ripetizioni == 0) {
Serial.println("Finito cicli.");
fase = 0;
}
break;
case 2: // fase di stop
Serial.println("------------------------");
Serial.println("Interruzione ciclo...");
Serial.println("------------------------");
Serial.println("Chiudi valvola carico olio");
Serial.println("Chiudi valvola aspirazione");
Serial.println("Spegni pompa vuoto");
Serial.println("Apri valvola scarico aria");
dly(1);
Serial.println("Chiudi valvola scarico aria");
Serial.println("Finito stop.");
Serial.println("------------------------");
fase = 0;
break;
}
}