Visualizzare il conteggio dei millis() sul display

Ciao a tutti, ogni tanto mi viene in mente una miglioria al progetto tenda e cerco di metterla in atto senza aiuti da parte vostra ma non sempre ci riesco ed

Pongo la domanda ma nell'attesa delle vostre risposte provo a fare da solo: Faccio chiudere la tenda quando la luce solare scende sotto ad un set per 15 minuti, per contare questo tempo uso il solito sistema con millis(), ora vorrei vedere il tempo di questa attesa scorrere sul display, un minuto alla volta.

visualizzare al display, potrebbe funzionare? E si potrebbe anche fare un conto alla rovescia che parta dal tempo impostato di attesa e arrivi a zero?

Ringrazio per l'aiuto :-)

lucesole_lux = map(analogRead(temt6000),0,1023,0,1000); // mappa il valore letto dal foto transistor (modulo TEMT6000) per renderlo in lux

setluce_lux = map(analogRead(potsetluce),0,1023,0,1000); // mappa il valore letto dal trimmer del set luce (10k) per renderlo in lux

{ consenso_luce = LOW; // mette il consenso luce a LOW per evitare conflitti fra la chiusura per luce e quella per pulsante

millis continuamente }

if ((lucesole_lux < setluce_lux) && (consenso_luce == LOW)) //se

consenso_luce = HIGH; //setta il consenso per poter diseccitare il rele_CH alla fine del ciclo di chiusura }

if ((lucesole_lux < setluce_lux) && (consenso_luce == HIGH )) //se la

if (((millis() - tempo_luce_1)/1000) == secondi_luce) //se il tempo raggiunge i secondi

settati

{ if (digitalRead(rele_AP)== HIGH) { digitalWrite(rele_AP, LOW); //diseccita rele_AP nel caso fosse eccitato delay(400); //tempo di attesa diseccitazione rele_AP }

digitalWrite (rele_CH, HIGH); //mette ON rele chiusura

} }

--
Saluti da Drizzt. 


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

Il 15/04/2020 19:25, Drizzt do'Urden ha scritto:

la cambierei in

T=millis(); if (((T-tempoLuce_1)/1000)>=secondi_luce)

Dimmi se cosi va', giorgio

Reply to
Giorgio

Il 15/04/2020 21:19, Giorgio ha scritto:

variabile, ma funziona ugualmente anche come l'hai scritto tu.

--
Saluti da Drizzt. 


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

Il 15/04/2020 19:25, Drizzt do'Urden ha scritto:

Alla fine ce l'ho fatta :-)

if ((lucesole_lux < setluce_lux) && (consenso_luce == LOW ))

{

ho creato la variabile unsigned long indica_tempo_luce

indica_tempo_luce = ((millis() - tempo_luce_1)/1000);

if (indica_tempo_luce == secondi_luce) //se il tempo

(secondi_luce deve essere superiore a t1_luce)

{ digitalWrite(rele_AP, LOW); //diseccita rele_AP delay(400); //tempo di attesa diseccitazione rele_AP digitalWrite (rele_CH, HIGH); //mette ON rele chiusura consenso_luce = HIGH; }

}

{ lcd.setCursor(9,1); // si scrive un cancelletto per far capire

lcd.print("#"); lcd.setCursor (0,2); lcd.print (secondi_luce - indica_tempo_luce); // scrive sul display

}
--
Saluti da Drizzt. 


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

nella condizione di "vero", questo soprattutto se devi controllare dei

prima di superare il valore della variabile, ma in altre situazioni potrebbe succedere.

Questo vale soprattutto se dovessi usare variabili a virgola mobile.

Reply to
Franco Af

Il 16/04/2020 23:14, Franco Af ha scritto:

messo il delay troppo alto, in effetti, per come ho cambiato il codice potrei anche mettere >=.

il tempo ma ora con la modifica che ho fatto, una volta raggiunto il

--
Saluti da Drizzt. 


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

Il 16/04/2020 23:14, Franco Af ha scritto:

cosa strana, il conto scende da 900 e arriva a 0 ma quando passa da 100 a 99 succede questo:

100 990 980 970

ecc ecc e quando arriva a 10:

100 900 800 700

ecc ecc fino a 000

Come posso fare per far vedere il numero giusto?

--
Saluti da Drizzt. 


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

Prima hai scritto 100 e dopo 99

Reply to
Franco Af

Il 17/04/2020 18:28, Franco Af ha scritto:

ehhh si, ma come :-)

In pratica esegue una sottrazione di un valore millis() da una variabile impostata da me:

{ lcd.setCursor(9,1); // si scrive un cancelletto per far capire

lcd.print("#"); lcd.setCursor (0,2); lcd.print (secondi_luce - indica_tempo_luce); // scrive sul display il conto alla rovescia del tempo attesa chiusura per luce }

{ lcd.setCursor(9,1); // si spegne il cancelletto lcd.print(" "); // pulisce il display lcd.setCursor (0,2); // spegne il conto alla rovescia lcd.print (" "); // pulisce il diplay }

--
Saluti da Drizzt. 


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

Il 16/04/2020 23:14, Franco Af ha scritto:

Difatti gliel'ho cambiata in >=

Reply to
Giorgio

Il 4/17/2020 6:42 PM, Drizzt do'Urden ha scritto:

Setti il cursore a 2, ma avevi scritto da 3 e non hai cancellato??? P.S. Non conosco arduino ma solo un po' di C e spero di darti una indicazione valida. Comunque puoi anche provare a aggiungere spazi alla riga lcd.print per cancellare piu' lettere; vedrai che il problema e' solo quelo (Spero!)

Reply to
Deh!

"Drizzt do'Urden" ha scritto nel messaggio news:r7cm9o$i47$ snipped-for-privacy@gioia.aioe.org...

ti suggerisco questa strada, ha il vantaggio che il numero rimane incolonnato e occupa sempre 3 caratteri sul display:

set { int x=secondi_luce - indica_tempo_luce; lcd.setCursor(9,1); // si scrive un cancelletto per far capire che

lcd.print("#"); lcd.setCursor (0,2); if( x

Reply to
alfio

lcd.print(cifra," "); oppure cancellare e poi riposizionarti per scrivere la cifra.

Reply to
Franco Af

Il 17/04/2020 19:09, alfio ha scritto:

Si funziona, grazie :-)

carattere si elimina proprio quello giusto dei tre o dei due.

100 990 980

100 99 98

quindi capisco che lo spazio serve a cancellare un carattere ma non capisco come faccia il lcd.print ( x ) a scrivere dopo il carattere cancellato senza avere una coordinata di partenza.

Reply to
Drizzt do'Urden

"Drizzt do'Urden" ha scritto nel messaggio news:r7ct4n$c0r$ snipped-for-privacy@gioia.aioe.org...

capisco

perche' funziona cosi' la libreria LiquidCrystal. il posizionamento serve per definire dove iniziare a scrivere, poi la colonna viene auto incrementata ad ogni carattere scritto con lcd.print

le istruzioni: lcd.setCursor (0,0); lcd.print( "ciao" );

sono equivalenti a : lcd.setCursor (0,0); lcd.print( "c" ); lcd.print( "i" ); lcd.print( "a" ); lcd.print( "o" );

Reply to
alfio

Il 17/04/2020 20:52, alfio ha scritto:

ahhhh, ottima spiegazione, grazie mille :-)

--
Saluti da Drizzt. 


www.agidone.altervista.org 
 Click to see the full signature
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.