Bonjour les copains,
Le sujet a déjà été abordé, mais je n'arrive pas à retrouver le lien.
Je peux te proposer trois programmes qui ici m'ont servi comprendre les divers moyens de gérer le temps avec le langage C d'Arduino. Ils ont l'avantage de fonctionner. Tu pourras les télécharger, voir ce qu’il font, puis, décortiquer les instructions pour adapter à tes besoins.
Programme 1
/* Programme pour la gestion du temps sur Arduino sans utiliser dealay(). */
#define LED 13
#define TEMOIN_de_boucle 8
#define DELAI 1000
#define TEMPO_courte 100
// Variables globales.
boolean Etat_LED = false, Bascule_de_boucle = false;
long Ancienne_Horloge = 0 , Ancien_temoin = 0;
unsigned long Horloge_actuelle;
void setup() {pinMode(LED, OUTPUT); pinMode(TEMOIN_de_boucle, OUTPUT); }
void loop() {
Horloge_actuelle = millis();
if(Horloge_actuelle - Ancien_temoin > TEMPO_courte)
{Bascule_de_boucle = 1 - Bascule_de_boucle; Ancien_temoin = Horloge_actuelle;}
digitalWrite(TEMOIN_de_boucle, Bascule_de_boucle);
if(Horloge_actuelle - Ancienne_Horloge > DELAI)
{Etat_LED = 1 - Etat_LED; Ancienne_Horloge = Horloge_actuelle;}
digitalWrite(LED, Etat_LED); }
Programme 2
/* Programme pour tester la génération du temps sur Arduino.
ATTENTION : Toute réactivation de la ligne série USB provoque un redémarrage, donc
la perte de la valeur du Timer 0 qui est remis à zéro. */
// Variables globales.
unsigned long HORLOGE_SYSTEME;
void setup(){ Serial.begin(115200); }
void loop(){
Serial.print("Temps "); Serial.print(char(233));
Serial.print("coul"); Serial.print(char(233)); Serial.print(" : ");
HORLOGE_SYSTEME = millis();
// Affiche sur la ligne série USB le temps écoulé depuis le redémarrage du programme.
Serial.println(HORLOGE_SYSTEME/1000); delay(1000); // Un affichage par seconde.
}
// INFINI: goto INFINI; }
Programme 3
#define TEMPO 600 // Dix minutes = 600 secondes.
// Variables globales.
unsigned long DUREE_ECOULEE, TOP_CHRONO;
void setup(){ Serial.begin(115200); TOP_CHRONO = millis()/1000;}
void loop(){
Traiter_toutes_les_dix_minutes(); }
void Traiter_toutes_les_dix_minutes() {
DUREE_ECOULEE = (millis()/1000) - TOP_CHRONO;
if (DUREE_ECOULEE == TEMPO)
{ Serial.print("Heure systeme = "); Serial.println(millis()/1000);
TOP_CHRONO = millis()/1000;} }
Je n’ai pas le temps actuellement de créer du code pour ton problème spécifique, mais ce qui précède devrait t’aider.
Amicalement : Nulentout.