Pages: [1]   Go Down
Author Topic: Gestione tempo: ore/minuti/secondi  (Read 1650 times)
0 Members and 1 Guest are viewing this topic.
Roma
Offline Offline
Newbie
*
Karma: 1
Posts: 39
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Fidenza (PR)
Offline Offline
Full Member
***
Karma: 3
Posts: 143
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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;
Logged

Roma
Offline Offline
Newbie
*
Karma: 1
Posts: 39
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged


Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged


Roma
Offline Offline
Newbie
*
Karma: 1
Posts: 39
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Grazie

posto il codice che sto utilizzando per fare test:

Code:
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?
Logged

Roma
Offline Offline
Newbie
*
Karma: 1
Posts: 39
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset


[/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
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
Devi mettere un semplice if: se il valore è minore di 10, stampi prima uno "0" e poi la variabile, altrimenti stampi la variabile direttamente.
Logged


Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged


Pages: [1]   Go Up
Jump to: