Aggiungere display al programma tenda.

Ora che il programmino funziona bene, secondo voi vale la pena aggiungere un display (ho un 20caratteri X 4 linee) che indichi i vari

azione del motore (apre o chiude), e che si accenda la retroilluminazione quando si attiva il motore o quando si preme un tasto?

Ce la posso fare a incasinare tutto? :-P

azioni del motore?

--
Saluti da Drizzt. 


www.agidone.altervista.org 
 Click to see the full signature
Reply to
Drizzt do'Urden
Loading thread data ...

Drizzt do'Urden wrote in news:qortjg$1bbn$1 @gioia.aioe.org:

tenda.

Poi nel nas ci monti domoticz e registri il vento la luce...la temperatura e

Bha...

--
eth:  0x28e63f48df95055b1bf3d39fbcadc5ca02a4df94 
ethc: 0x463459c9f6f290e41f3d05f531ce8dd02bbfdb09 
 Click to see the full signature
Reply to
Allen

Il 24/10/2019 14:41, Allen ha scritto:

Ora ci provo, anche solo per imparare ad usare l'LCD.

Prima cosa: quali sono le procedure giuste per scrivere sul LCD senza che le lettere sfarfallino? Immagino che questo sia dovuto al fatto che a ogni ciclo va a scrivere il valore, infatti se metto un delay si vede molto meglio. In pratica, se devo scrivere un valore che cambia spesso come devo fare?

Ho cercato in rete ma ho trovato solo le solite cose e nulla che spieghi esattamente i "trucchi" da usare per avere un programma ben funzionale.

Urgono consigli :-)

Reply to
Drizzt do'Urden

Il 24/10/19 18:43, Drizzt do'Urden ha scritto:

Bisogna scrivere solo quando c'e` qualcosa di nuovo/diverso dal giro precedente.

Reply to
Claudio_F

Il 24/10/2019 19:08, Claudio_F ha scritto:

Per fare questo si usa un if per fare il confronto con i valori?

Reply to
Drizzt do'Urden

Il 24/10/19 19:20, Drizzt do'Urden ha scritto:

Essi`.

La lettura attuale la confronti con la precedente (ok, solo al primissimo giro non ci sara` una precedente), se diversa fai quello che serve e attualizzi lettura precedente a lettura attuale, cosi` la lettura attuale diventa la precedente per giro successivo.

Reply to
Claudio_F

Il 24/10/2019 19:37, Claudio_F ha scritto:

Sto provando ma comunque ogni ciclo scrive sul LCD e la scritta

quando non cambia.

Reply to
Drizzt do'Urden

Il 24/10/2019 19:37, Claudio_F ha scritto:

Ok, ho risolto in modo diverso altrimenti si aggiornava sempre, magari

int finecorsaCH_lcd = 0; // variabile per scrivere lo stato del finecorsa chiuso sul LCD

int finecorsaAP_lcd = 0; // variabile per spegnere la scritta dello stato del fine corsa sul LCD

finecorsaCH_lcd++; //inizia il conteggio della varibile

if ((digitalRead(finecorsa) == LOW)&& (finecorsaCH_lcd > 200)) //se il

{ lcd.setCursor(8,0); // allora scrive sul lcd lcd.print(" "); // prima pulisce lo spazio dove scrivere lcd.setCursor(8,0); lcd.print("Tenda Chiusa"); // poi scrive finecorsaCH_lcd = 0; //poi rimette la variabile a 0 } // tutto questo per aggiornare la scrittura ogni 200 cicli ed evitare lo sfarfallio

if (digitalRead(finecorsa) == HIGH) finecorsaAP_lcd++;

if ((digitalRead(finecorsa) == HIGH)&& (finecorsaAP_lcd > 200)) { lcd.setCursor(8,0); lcd.print(" "); finecorsaAP_lcd = 0; }

Reply to
Drizzt do'Urden

Il 24/10/2019 23:52, LAB ha scritto:

questo lo faccio sempre, non si sa mai, avere file dei deiversi step di avanzamento aiuta in caso di dover tornare sui propri passi senza impazzire. :-)

questo l'ho fatto

E qui viene il complicato (per me), tutti gli esperimenti che ho fatto, alla fine non riesco a mantenere il

Non so se mi sono spiegato :-)

esempio:

if (stato_AP == HIGH) precedente_millis = millis();

if ((millis() - precedente_millis) > 500))

"scrivi sul LCD"

precedente_millis = millis()

precedente_millis viene sempre aggiornato quindi la sottrazione non

Sbaglio ragionamento?

Reply to
Drizzt do'Urden

Il 25/10/2019 16:17, LAB ha scritto:

per ora mi trovo meglio con voi :-)

Comunkque, alla fine funziona tutto, ho aggiunto il display e lavora bene, ho anche mappato l'ingresso della fotoresistenza per rendere i

Per ora sono soddisfatto, unico difetto, utilizzando l'alimentazione della USB del pc, se accendo la luce neon del laboratorio, qualche volta

nel circuito, spero che con un'alimentazione filtrata bene, nel circuito finale, non succeda. Magari tutti quei fili sulla bread board attirano disturbi.

Reply to
Drizzt do'Urden

Il 25/10/19 16:34, Drizzt do'Urden ha scritto:

Beh, no, non sarebbe normale :D

Ma impazzisce solo l' LCD o anche Arduino? (sarebbe grave)

Sicuramente la filatura volante su bread non e` il massimo.

Ma parliamo di LCD parallelo? Seriale i2c?

Potrebbe bastare una R pull-up da 1k sul pin E dell'LCD con un condensatore 100nF verso massa per rendere quella linea meno disturbabile.

Reply to
Claudio_F

Il 26/10/2019 12:43, Claudio_F ha scritto:

buona notizia :-)

solo l'LCD

parallelo

Ok, provo :-)

--
Saluti da Drizzt. 


www.agidone.altervista.org 
 Click to see the full signature
Reply to
Drizzt do'Urden

Il 26/10/2019 16:55, LAB ha scritto:

Si, il problema lo da sia con l'alimentazione della USB che quella dell'alimentatore stabilizzato. Saranno sicuramente tutti quei fili

Ogni volta che credo di aver finito mi viene in mente qualcos'altro da

mi infamate :-P

formatting link

Reply to
Drizzt do'Urden

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

Perche' i rele' comandati sull'emettitore?

Reply to
Claudio_F

Il 27/10/2019 08:42, Claudio_F ha scritto:

Non vi sfugge niente :-)

anni che non creo un progettino, direi almeno 10, e sul momento

collettore ma non avendo ancora iniziato a fare lo schema sul pc non l'ho modificato.

il sistema che ho usato per temporizzare sia le scritte che l'accensione

sempre visto che in un caso incrementa sempre il valore anche quando non sta facendo nulla, volevo usare millis ma non sono riuscito a trovare la maniera.

In pratica vorrei contare il tempo di accensione del LCD solo dopo che

base al caso specifico in cui va a ON, quindi inizio il conteggio quando lo stato va a OFF.

ho usato il classico "conta++" e quando arriva al valore impostato esegue il codice.

precedente viene sempre aggiornato, essendo la condizione di OFF permanente.

// PARTE PER ACCENSIONE E SPEGNIMENTO ILLUMINAZIONE LCD

if ((digitalRead (rele_AP) == HIGH) != (digitalRead (rele_CH) == HIGH))

{ analogWrite(illumina_lcd, 100); //accende l'LCD col PWM a 100% azzera il contatore di accensione tempo_illumina=0; } if ((digitalRead(rele_AP)==LOW)&(digitalRead(rele_CH)==LOW))//in seguito

tempo_illumina++; //inizia il conteggio del tempo

if (tempo_illumina >= 1000) //quando raggiunge il valore settato {

azzera nuovamente il contatore tempo_illumina=0; //in questa maniera, il tempo di accensione parte

} //per avere sempre lo stesso tempo di accensione dopo la fine di un comando

zero.

--
Saluti da Drizzt. 


www.agidone.altervista.org 
 Click to see the full signature
Reply to
Drizzt do'Urden

Il 27/10/2019 10:28, LAB ha scritto:

--
Saluti da Drizzt. 


www.agidone.altervista.org 
 Click to see the full signature
Reply to
Drizzt do'Urden

Il 27/10/2019 10:22, LAB ha scritto:

ahhhhhhh, ora forse ho capito, non riuscivo a comprendere come non far aggiornare continuamente t1.

if(stato_AP == HIGH) digitalWrite(accendi_lcd, HIGH);

if((stato_AP==LOW)&(stato_AP_precedente==HIGH)) stato_AP_precedente=LOW; t1=millis();

if(millis()-t1 >= 1000) digitalWrite(accendi_lcd, LOW);

--
Saluti da Drizzt. 


www.agidone.altervista.org 
 Click to see the full signature
Reply to
Drizzt do'Urden

Il 27/10/2019 10:50, Drizzt do'Urden ha scritto:

Fatto, ci ho messo un po a comprendere bene il funzionamento ma alla fine ce l'ho fatta :-)

Come sempre siete fenomenali, grazie :-)

// PARTE PER ACCENSIONE E SPEGNIMENTO ILLUMINAZIONE LCD

if (digitalRead (rele_AP) == HIGH) { analogWrite(illumina_lcd, 100); stato_rele_precedente=HIGH; }

if((digitalRead(rele_AP) == LOW) & (stato_rele_precedente == HIGH)) { stato_rele_precedente=LOW; tempo_lcd=millis(); }

if((millis()-tempo_lcd) > 5000) { tempo_lcd=millis(); analogWrite(illumina_lcd, 5); }

if (digitalRead (rele_CH) == HIGH) { analogWrite(illumina_lcd, 100); stato_rele_precedente=HIGH; }

if((digitalRead(rele_CH) == LOW) & (stato_rele_precedente == HIGH)) { stato_rele_precedente=LOW; tempo_lcd=millis(); }

if((millis()-tempo_lcd) > 5000) { tempo_lcd=millis(); analogWrite(illumina_lcd, 5); }

Reply to
Drizzt do'Urden

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

[...]

Quasi.

Le graffe mettile sempre altrimenti e` facilissimo confondersi.

Sarebbe cosi`:

if (stato_AP == HIGH) { digitalWrite(accendi_lcd, HIGH); // acceso }

if ((stato_AP == LOW) && (stato_AP_precedente == HIGH) ) { t1 = millis(); // memorizza su fronte discesa stato_AP }

stato_AP_precedente = stato_AP; // aggiorna sempre stato precedente

if ((stato_AP == LOW) && (millis()-t1 >= 1000)) { digitalWrite(accendi_lcd, LOW); // spento }

Ma comunque aggiornare sempre 't1' non e` necessariamente un problema, il tutto si puo` semplificare con il codice seguente (e` importanissimo l' 'else'):

if (stato_AP == HIGH) { t1 = millis(); // aggiorna sempre tempo digitalWrite(accendi_lcd, HIGH); // acceso } else if ((millis() - t1) > TEMPO) { digitalWrite(accendi_lcd, LOW); // spento }

Se poi ragioni a situazioni 'S' descrivere logiche e sequenze anche complesse diventa semplice:

if ((1 == s) && releAcceso()) { accendiLCD(); s = 2; } else if ((2 == s) && !releAcceso()) { t = millis(); s = 3; } else if ((3 == s) && releAcceso()) { s = 2; } else if ((3 == s) && (millis()-t > TEMPO)) { spegniLCD(); s = 1; }

Reply to
Claudio_F

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

a essere sincero non ho ancora compreso esattamente come funzionano, fin'ora, a forza di tentativi, le ho messe bene ma non ho trovato nulla in rete che le spieghi bene.

ci devo studiare sopra, ora vado a pranzo che a panza piena si ragiona meglio :-)

Reply to
Drizzt do'Urden

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.