Aggiungere display al programma tenda.

Oct 24, 2019 35 Replies

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); }

Il 27/10/19 13:27, Drizzt do'Urden ha scritto:

Delimitano il blocco di istruzioni da eseguire sotto 'if' 'else' 'while' 'for' ecc. Nel caso di una singola istruzione non sono obbligatorie ma e` buona abitudine metterle lo stesso, al punto che a volte vengono scritte anche qundo non vi sono istruzioni da eseguire. La riga seguente ferma il programma in attesa che il pin 'INGRESSO' vada alto:

while (digitalRead(INGRESSO) == LOW) {}

Il 27/10/19 10:11, Drizzt do'Urden ha scritto:

Beh, non e` che non si puo` fare. E' che il transistor non satura e al rele' arriva un po' meno tensione, ma funziona benissimo lo stesso.

Il 28/10/19 06:58, Archaeopteryx ha scritto:

Il regolamento oggi e` applicato in modo draconiano, quasi sempre chi scrive il primo post viola ennemila punti per cui riceve un "benvenuto" da tribunale militare (ma se non ha letto il regolamento non e` certo colpa del forum o dei moderatori). In piu` ci sono diverse persone ormai stufe delle "meteore" che passano solo a copiare e pretendono di essere "servite" senza neppure sforzarsi a spiegare chiaramente il problema riscontrato. Inoltre per evitare rogne legali ogni allusione ai 230V o sentore che stai facendo qualcosa collegato ai 230V causa la chiusura della discussione, e discussioni "generali" che non riguardano in qualche modo l'uso/collegamento di Arduino (vedi elettronica generale) sono malviste se non bandite. Poi se al primo post capiti sotto il fuoco incrociato di un partecipante particolarmante "polemico"... si fa presto a percepire un'aria pesante :)

A beh, si per quello lo guardo sempre a zoom 150..170% :D Ma e` una cosa che non mi urta perche' comunque quasi tutte le pagine le guardo sempre zommate.

Il 27/10/2019 14:03, Claudio_F ha scritto:

Ho visto solo ora il tuo post, ora verifico. Per "ramo di esecuzione" intendi sotto le stesse parentesi graffe?

Il 27/10/2019 14:03, Claudio_F ha scritto:

Comunque ora provo, darebbe una bella sfoltita :-)

Il 27/10/2019 14:03, Claudio_F ha scritto:

alt un pas :-)

altrimenti, con i tempi diversi che ci sono potrebbe spegnersi durante un'operazione.

Il 27/10/2019 14:03, Claudio_F ha scritto:

Stuzzicato dal tuo consiglio ho sfoltito a modo mio e funziona:

if ((digitalRead (rele_AP) == HIGH) != (digitalRead(rele_CH) == HIGH)) { analogWrite(illumina_lcd, 100); //accende l'LCD con PWM a 100% stato_rele_precedente=HIGH; //mette lo stato precedente a HIGH }

if((digitalRead(rele_AP) == LOW) & (digitalRead(rele_CH) == LOW)) { if (stato_rele_precedente == HIGH) { stato_rele_precedente=LOW; tempo_lcd=millis(); } } if((millis()-tempo_lcd) > 5000) { tempo_lcd=millis(); analogWrite(illumina_lcd, 5); }

Il 28/10/19 12:56, Drizzt do'Urden ha scritto:

Qualcosa non mi torna. Il codice fa quello che dici: finche' uno dei due valori rimane HIGH, 'tempo_lcd' continua ad "inseguire" il tempo reale, e solo quando entrambi i valori diventano LOW, allora non cambia piu` e inizia il vero conteggio dei 5 secondi.

Il 28/10/2019 13:47, Claudio_F ha scritto:

uhmmm, cerco di capire e provo :-)

Il 28/10/2019 13:47, Claudio_F ha scritto:

Ok funziona... uffa!

arrivato, grazie, abbiamo ulteriormente sfoltito il codice :-)

Il 28/10/2019 15:06, Drizzt do'Urden ha scritto:

se non ho capito male, l'if dell'else viene eseguito sempre quando i due

Quindi esegue continuamente la sottrazione.

Il 28/10/19 15:19, Drizzt do'Urden ha scritto:

Si, devono essere entrambi OFF (altrimenti e` vera la condizione di sopra). Quando sono entrambi OFF viene sempre valutato il secondo if condizionato/subordinato all' else del primo.

Si puo` anche dire che sono due if mutuamente esclusivi di cui il primo ha la precedenza sul secondo, e se risulta vero il primo allora il secondo viene ignorato.

Il 28/10/19 08:30, Claudio_F ho scritto:

Per dire solo negli ultimi giorni diversi casi

Primo post, violazioni: - mancata lettura/comprensione regolamento - mancata presentazione - scrittura su sezione di lingua errata - codice non formattato

Primo post, violazioni: - mancata lettura/comprensione regolamento - mancata presentazione - richiesta info su misure 230V contatti rele'

Primo post, violazioni: - mancata lettura/comprensione regolamento - mancata presentazione - scrittura su sezione di lingua errata - crosspost su diverse sezioni

Primo post, violazioni: - mancata lettura/comprensione regolamento - mancata presentazione - scrittura su sezione di lingua errata

Hanno tutti un denominatore comune: *non leggere il regolamento*

Qualcuno non si fa piu` vivo, qualcuno se ne frega e prova a riscrivere, venendo non solo (ri)invitato, ma vedendosi anche bloccare i post.

Moderatori cattivi o utenti che se ne sbattono e pretendono soltanto?

Tutte queste persone (saranno una decina a settimana?) non scriveranno mai piu` ;)

regolamento non lo legge mai nessuno)

Sono moderatori che non hanno nulla da fare :)

Il 28/10/19 16:32, Franco Af ha scritto:

:D

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required