Salve allora leggendo di qua e di la su internet leggo che la funzione millis() dopo 47 giorni si resetta, ok.... però mi mostra solo i secondi.
Io vorrei una funzione che invece mi faccia spuntare d:h:m:s;
ho scaricato la libreria secTimer ma dopo averla estratta tutta per intera dentro la cartella steckbook\libreries , una volta che l 'includo
#include "secTimer.h"
programma.ino:1:22: fatal error: secTimer.h: File o directory non esistente
compilation terminated.
Il problema del reset della funzione millis() è relativo, basta sapere come gestirlo
Detto questo, siccome sono l'autore della secTimer, posso certificarti che la lib funziona perfettamente per cui se hai degli errori dipenderà da come hai incluso la lib in Arduino. Tu dici che l'hai "estratta tutta per intera dentro la cartella steckbook\libreries" ma... l'hai lasciata nella sua cartella secTimer?
Il percorso del file .h deve essere sketchbook/libraries/secTimer/secTimer.h
L'errore è chiaro, ti dice che non ha trovato il file o la directory, per cui ricontrolla il percorso.
Ah, per la cronaca, la cartella si chiama "sketchbook", non "steckbook", non so se dipende da questo ma ho notato che lo hai scritto male 2 volte: la prima pensavo fosse un errore di digitazione, però ora nel percorso che metti noto nuovamente l'errore.
Il percorso è giusto. L'hai copiata lì dentro ad IDE chiuso? Altrimenti non te la vede.
Al riavvio, hai trovato in "File/Esempi" la voce secTimer e poi l'esempio allegato alla libreria?
Allora ci sono riuscito, in pratica io avevo istallato arduino da terminale , e includendo la libreria non andava.
Ora ho scaricato la versione dal sito , e aprendo l'ide (che è una verione portable) riesce a leggere il secTimer.h e spunta pure la voce secTimer->secTimerled
Ora vorrei fare una funzione che mi scandisca il tempo,
in gg:hh:mm:ss
fionda08:
Allora ci sono riuscito, in pratica io avevo istallato arduino da terminale , e includendo la libreria non andava.
Ora ho scaricato la versione dal sito
Bisogna sempre usare la versione scaricata dal sito, con le altre ho sempre avuto problemi.
Ora vorrei fare una funzione che mi scandisca il tempo,
in gg:hh:mm:ss
Beh, non devi fare altro che un semplice orologio software con 4 variabili, gg, hh, mm e ss che incrementerai a cascata ad ogni variazione di 1 secondo.
Guarda l'esempio allegato, secTimerLed: al posto del cambio di stato del LED ci metterai gli incrementi dei secondi. Dopo 59 secondi, rimetti a 0 i secondi ed incrementi di 1 i minuti. Dopo 59 minuti, rimetti a 0 i minuti ed incrementi di 1 le ore e così via.
PS:
tieni presente che la precisione di un Arduino nel misurare il tempo è mooolto limitata, puoi perdere anche diversi minuti al giorno.
Allora io ho fatto una breve implementazione, ma una volta che faccio stampare seconds mi da sempre 0 ripetuto all 'infinito, io pensavo che incrementasse.
questo è il codice
#include "secTimer.h"
int led =13;
unsigned long seconds;
secTimer mytimer;
void setup(){
pinMode(led,OUTPUT);
Serial.begin(9600);
mytimer.startTimer();
seconds=mytimer.readTimer();
}
void loop (){
Serial.println(seconds);
}
Piccolo problema, tutto va bene fino al 59esimo secondo, dopo di che lui porta a 0 i secondi ma i minuti ore e giorni attribuisce valori a casaccio, premetto che ho inizializzato tutti i valori = 0
questo è il codice
#include"secTimer.h"
int led = 13;
char select ;
unsigned long secondi=0 ;
int minuti =0;
int ore=0;
int giorni=0;
secTimer mytimer;
void setup(){
pinMode(led,OUTPUT);
Serial.begin(9600);
Serial.println("select 1 -> led ON\nselect 0 -> led OFF\nselect t -> show run time\n");
mytimer.startTimer();
}
void loop(){
select=Serial.read();
secondi=mytimer.readTimer() %60 ;
if(secondi==59 ){
minuti=minuti+1;
}
if(minuti==59){
ore=ore+1;
minuti=0;
}
if(ore==24){
giorni=giorni+1;
ore=0;
}
if(select=='1'){
digitalWrite(led,HIGH);
Serial.println("led HIGH");
}
if(select=='0'){
digitalWrite(led,LOW);
Serial.println("led LOW");
}
if(select=='t'){
Serial.println("aggiornamento tempo...");
Serial.println("giorni:");
Serial.println(giorni);
Serial.println("ore:");
Serial.println(ore);
Serial.println("minuti:");
Serial.println(minuti);
Serial.println("secondi:");
Serial.println(secondi);
Serial.println("**********");
}
}
#include"secTimer.h"
int led = 13;
char select ;
unsigned long secondi=0 ;
unsigned long minuti =0;
unsigned long ore=0;
unsigned long giorni=0;
secTimer mytimer;
void setup(){
pinMode(led,OUTPUT);
Serial.begin(9600);
Serial.println("select 1 -> led ON\nselect 0 -> led OFF\nselect t -> show run time\n");
mytimer.startTimer();
}
void loop(){
delay(1000);
select=Serial.read();
secondi=mytimer.readTimer() %60 ;
if(secondi==59){
minuti++;
if(minuti==60){
ore++;
minuti=0;
}
if(ore==24){
giorni++;
ore=0;
}
}
if(select=='1'){
digitalWrite(led,HIGH);
Serial.println("led HIGH");
}
if(select=='0'){
digitalWrite(led,LOW);
Serial.println("led LOW");
}
if(select=='t'){
Serial.println("aggiornamento tempo...");
Serial.print("gg:");
Serial.print(giorni);
Serial.print(":");
Serial.print(ore);
Serial.print(":");
Serial.print(minuti);
Serial.print(":");
Serial.println(secondi);
Serial.println("**********");
}
}
allora intanto ho cambiato minuti ore e giorni da int a unsigned long.
e dentro gli if invece di fare esempio(minuti=minuti+1) ho fatto (minuti++)
e il codice va!