Objectifs
- Savoir programmer une horloge numérique
- Savoir accélérer ou ralentir l’horloge
- Savoir utiliser des nouvelles fonctions
- Limitations de la technique
Applications
- Horloge numérique
- Actions temporisées
- Ordonnancement des tâches & la gestion du temps
- Etc.
Exemple 1
Lecture de l’horloge interne en ms
Temps_ms=millis(); // 2^32 milli-secondes = 49.71 jours
Calcul des secondes
Num_sec= (Temps_ms/TSec)%60;
Calcul des minutes
Num_min= (Temps_ms/(TSec*60))%60;
Calcul des heures
Num_heur= (Temps_ms/(TSec*3600))%60;
Calcul des jours
Num_jour= (Temps_ms/(TSec*86400)); //3600*24=86400
Affichage de l’horloge
Serial.print(Num_jour);Serial.print(":");
Serial.print(Num_heur);Serial.print(":");
Serial.print(Num_min);Serial.print(":");
Serial.println(Num_sec);
const unsigned long TSec=1000;
unsigned long Num_ms, Num_sec,Num_min;
unsigned long Num_heur,Num_jour, Temps_ms;
void setup()
{
// Init du port série
Serial.begin(9600);
}
void loop()
{
// Lecture de l'horloge interne en ms
Temps_ms=millis(); // 2^32 secondes = 49.71 jours
// Calcul des secondes
Num_sec= (Temps_ms/TSec)%60;
// Calcul des minutes
Num_min= (Temps_ms/(TSec*60))%60;
// Calcul des heures
Num_heur= (Temps_ms/(TSec*3600))%60;
// Calcul des jours
Num_jour= (Temps_ms/(TSec*86400)); //3600*24=86400
// Affichage de l'horloge
Serial.print(Num_jour);Serial.print(":");
Serial.print(Num_heur);Serial.print(":");
Serial.print(Num_min);Serial.print(":");
Serial.println(Num_sec);
}
Exemple 2
unsigned long Num_ms, Num_sec,Num_min;
unsigned long Num_heur,Num_jour, Temps_ms;
unsigned long Clock[4];
// Clock[0] Jours
// Clock[1] Heures
// Clock[2] Minutes
// Clock[3] Secondes
void setup()
{
// Init du port série
Serial.begin(9600);
}
void loop()
{
// Lecture de l'horloge
getClock(Clock,10);
// Affichage
dispClock(Clock);
// Attente 1s
delay(1000);
}
void getClock(unsigned long *hologe, unsigned char Speed)
{
const unsigned long TSec1=1000;
// Lecture de l'horloge interne en ms
Temps_ms=Speed*millis();
// Calcul des secondes
hologe[0]= (Temps_ms/TSec1)%60;
// Calcul des minutes
hologe[1]= (Temps_ms/(TSec1*60))%60;
// Calcul des heures
hologe[2]= (Temps_ms/(TSec1*3600))%60;
// Calcul des jours
hologe[3]= (Temps_ms/(TSec1*86400)); //3600*24=86400
}
void dispClock(unsigned long *Clock)
{
Serial.print(Clock[3]);Serial.print(":");
Serial.print(Clock[2]);Serial.print(":");
Serial.print(Clock[1]);Serial.print(":");
Serial.println(Clock[0]);
}
Limitations
- Non synchrone (Il faut régler l’heure manuellement)
- Perte d’horloge en cas d’initialisation de la carte (faible alimentation, etc.)
- Horloge limitée à 49.71 jours (ce n’est pas un soucis si HH:MM:SS )
Sujets connexes
- programme horloge arduino lcd
- horloge arduino sans rtc
- horloge arduino ds3231
- ds1307 arduino
- ds3231 arduino
- programmateur horaire arduino
- arduino horloge programmable
- rtc arduino
3 réponses sur « Projet horloge simple avec Arduino sans RTC | GPS V1 »
merci
Avec plaisir!
Drone solaire longue distance & autonomie infinie!