Il 27/10/19 13:02, Drizzt do'Urden ha scritto:
Mmmm.... in teoria dovresti notare comportamenti anomali, hai scritto codice concorrente, in cui le istruzioni contenute in un if potrebbero annullare le operazioni esguite negli if precedenti.
In un ciclo di elaborazione un'uscita o una variabile dovrebbero poter ricevere un assegnamento/modifica solo in un unico ramo di esecuzione, invece potenzialmente potrebbero essere eseguite fino a quattro diverse analog write sullo stesso pin ad ogni ciclo di loop. Stessa sorte per la variabile 'stato_rele_precedente'.
Il controllo del timeout non solo e` duplicato, ma non e` condizionato a nulla, quindi in qualsiasi caso in cui il timeout risulti vero, il display viene portato a luminosita`5, anche se un rele' e` acceso.
Meglio semplificare ;)
if (HIGH == digitalRead(rele_AP) || HIGH == digitalRead(rele_CH)) { analogWrite(illumina_lcd, 100); tempo_lcd = millis(); } else if (millis()-tempo_lcd > 5000) { analogWrite(illumina_lcd, 5); }