Pour déclencher une action au bout d’un certain temps sans bloquer la carte, il est utile d’employer la fonction millis() qui retourne le nombre de millisecondes depuis l »alimentation de la carte.
//-- Les variables doivent être de type unsigned long
unsigned long t1, t2;
void setup(){
Serial.begin(9600);
t1=millis();
t1=t1+3000;
}
void loop(){
t2=millis();
if (t1<t2)
{//-- All the 30s prints Hello
Serial.println(t1);
Serial.println(t2);
t1=t2;
t1=t1+3000;
Serial.println("Hello 30s...");
}
}
Utilisation d’un TIMER :
La librairie Timer, écrite par Simon Monk, est disponible sur GitHub, à cette adresse.
Ce premier exemple passe un pin à +5v après 10 minutes :
#include "Timer.h" // on importe la librairie Timer t; // on déclare notre timer int pin = 13; void setup() { pinMode(pin, OUTPUT); t.pulse(pin, 10 * 60 * 1000, LOW); } void loop() { t.update(); // on pense bien à actualiser le timer } |
Ce deuxième exemple fait clignoter une LED toute les 100 millisecondes et envoie par liaison série toute les secondes la valeur en entrée du pin 0 :
#include "Timer.h" Timer t; int pin = 13; void setup() { Serial.begin(9600); pinMode(pin, OUTPUT); t.oscillate(pin, 100, LOW); //-- la fonction qui fait clignoter la led toutes les 100 ms t.every(1000, envoi); //-- et celle-ci qui appelle la fonction 'envoi' toutes les secondes } void loop() { t.update(); } void envoi() // fonction qui envoie par liaison série l'entrée du pin 0 { Serial.println(analogRead(0)); } |
Références :
Votre commentaire