Gestione tempo: ore/minuti/secondi

Buongiorno a tutti.

mi consigliate una libreria semplice per la gestione di cronometro/timer da impostare tramite variabili.

è fattibile gestire ora/minuti/secondi partendo dai soli millis() senza utilizzare librerie ma attraverso operazioni aritmetiche?

su gestioni di tempo che non superano le 2 ore, arduino offre una buona precisione?

Grazie

beh puoi gestire si ore/minuti/secondi con la millis()..non hai l'orario corrente però a meno che tu non sincronizzi la partenza dell'arduino ad una determinata ora..

secondi = millis() / 1000;
minuti = secondi / 60;
ore = minuti / 60;

1 Like

per far apparire una funzione timer, quindi a decremento, su un lcd come potrei fare?

esempio imposto le variabili: ore 01 - minuti 12 - secondi 00

voglio stampare su lcd: 01:12:00 e poi far partire il timer.

ho provato con lcd.print(secondi-millis()/1000);

riesco a visualizzare in countdown e poi imposto un if che mi azzera i millis() raggiunti i 00 secondi
l'unica pecca è che negli ultimi dieci secondi del countdown non visualizzo 09..08..07 etc.. ma 90..80..70..60

poi al raggiungimento dei 00 secondi devo decrementare di 1 la variabile dei minuti.

peppe123:
Buongiorno a tutti.

mi consigliate una libreria semplice per la gestione di cronometro/timer da impostare tramite variabili.

è fattibile gestire ora/minuti/secondi partendo dai soli millis() senza utilizzare librerie ma attraverso operazioni aritmetiche?

su gestioni di tempo che non superano le 2 ore, arduino offre una buona precisione?

Grazie

Se ti va, ho scritto una libreria apposita, si chiama swRTC ed implementa un RTC software usando un timer interno. La precisione dipende dalla tolleranza del generatore di clock usato. Nel caso dell'Arduino UNO, essendoci un risonatore ceramico, l'accuratezza non è delle migliori ma per intervalli di 2 ore uno scarto di qualche secondo è tollerabile.
Trov il link nella mia firma.

peppe123:
per far apparire una funzione timer, quindi a decremento, su un lcd come potrei fare?

esempio imposto le variabili: ore 01 - minuti 12 - secondi 00

voglio stampare su lcd: 01:12:00 e poi far partire il timer.

ho provato con lcd.print(secondi-millis()/1000);

riesco a visualizzare in countdown e poi imposto un if che mi azzera i millis() raggiunti i 00 secondi
l'unica pecca è che negli ultimi dieci secondi del countdown non visualizzo 09..08..07 etc.. ma 90..80..70..60

poi al raggiungimento dei 00 secondi devo decrementare di 1 la variabile dei minuti.

Questo perché quando la variabile assume un valore inferiore a 10, la stampa prende 1 sola cifra ma tu non cancelli cosa c'era prima sul display.
Per cui hai questa situazione:
...
12
11
10
90
80
70
...
Lo zero evidenziato in grassetto appartiene al "10" che c'era prima.
Devi mettere un semplice if: se il valore è minore di 10, stampi prima uno "0" e poi la variabile, altrimenti stampi la variabile direttamente.

Grazie

posto il codice che sto utilizzando per fare test:

int secondi = 60;

void loop() {
  lcd.setCursor(1, 1);

  lcd.print(secondi-millis()/1000);
  if (millis() ==51000) {????????????}
  if (millis() > 60000){resetMillis();}
  
  
}
void resetMillis() {
  cli();
  timer0_millis = 0;
  sei();
}

ho provato a mettere un lcd.clear() dove ci sono i punti interrogativi, funziona bene ma appare una sola cifra a sinistra che scala nella posizione (1,1)
come faccio a stampare uno "0" nella posizione (1,1) senza che il countdown scali posizione?

[/quote]
Se ti va, ho scritto una libreria apposita, si chiama swRTC ed implementa un RTC software usando un timer interno. La precisione dipende dalla tolleranza del generatore di clock usato. Nel caso dell'Arduino UNO, essendoci un risonatore ceramico, l'accuratezza non è delle migliori ma per intervalli di 2 ore uno scarto di qualche secondo è tollerabile.
Trov il link nella mia firma.
[/quote]

Ho scaricato la tua libreria, mi interessano solo le funzioni ora/minuti/secondi, come faccio ad utilizzarla come timer quindi facendogli fare un countdown?

Grazie mille

peppe123:
ho provato a mettere un lcd.clear() dove ci sono i punti interrogativi, funziona bene ma appare una sola cifra a sinistra che scala nella posizione (1,1)
come faccio a stampare uno "0" nella posizione (1,1) senza che il countdown scali posizione?

Con il clear cancelli tutto. Per la seconda domanda:

leo72:
Devi mettere un semplice if: se il valore è minore di 10, stampi prima uno "0" e poi la variabile, altrimenti stampi la variabile direttamente.

peppe123:
Ho scaricato la tua libreria, mi interessano solo le funzioni ora/minuti/secondi, come faccio ad utilizzarla come timer quindi facendogli fare un countdown?

Ad ogni secondo decrementi il valore del tuo timer. Esempio per un conto alla rovescia di 1 ora:
1:00:00
0:59:59
0:59:58
ecc..
Basta controllare il variare della funzione che restituisce i secondi.