Codice azionamento passerella idraulica imbarcazione.

vince59:
C'è un limite alle condizioni che posso porre internamente ad un if?

In senso di quantità? Non credo. Attendiamo smentite.
Certo che se devi mettere dieci o venti condizioni assieme, forse c'è qualcosa da rivedere nel design del programma :wink:

Tra l'altro per azionamenti così semplici alle volte può essere più facile ragionare a relé. Il seguente schema simulato a programma sono 19 righe in tutto, letture ingressi, temporizzatori e scrittura uscite compresi, e prevede anche che la pompa non si fermi immediatamente, in modo che se si vuole premere un altro tasto non tocca aspettare di nuovo ripartenza pompa e ritardo (i pulsanti sono ovviamente mutuamente esclusivi, quando uno è premuto gli altri sono esclusi):

Ad esempio:

// la prima riga
f1 = (digitalRead(PULS_ALZO)==PRESSLVL || digitalRead(telec_al)==TELECLVL) && !f2 && !f3 && !f4;


// il temporizzatore T1 (ritardato all'avvio)
if (!f1) { T1=0; t1=millis(); } else if (millis()-t1 > TDEL) T1=1;


// il temporizzatore T5 (ritardato al rilascio)
if (f1 || f2 || f3 || f4) { T5=1; t5=millis(); } else if (millis()-t5 > TSTOP) T5=0;


// comando rele'pompa
digitalWrite(RL_POMPA, T5 ? ONLVL : OFFLVL);


// il comando alzo
alzo = T1 || (f1 && f5);


// il rele'ausiliario f5 con autoritenuta
f5 = T5 && (alzo || abbasso || attendi || ritrai || f5);