Je suis entrain de m'amuser avec les timers du samd21, j'utilise la librairie de Adafruit pour le arduino zero, ça fonctionne bien j'arrive à bien configurer mon timer en fonction de la fréquence voulue.
Mais j'ai une petite question imaginons que je souhaite créer un timer de fréquence 2Hz par exemple qui s'occupe de faire clignoter une LED, jusque là pas de soucis j'y arrive, mais maintenant j'aimerais que ce timer de 2Hz ne soit "actif" que pendant 5 secondes par exemple.
Comment feriez vous? Créer une variable avec le temps de début quand je lance mon timer et ensuite dans la boucle loop du programme tester si le temps écoulé depuis le début et supérieur à 5 secondes alors je désactive mon timer où bien il existe une autre manière?
Bel état d'esprit et il y a de quoi faire avec ces Arduino!
Pour ta question, un petit truc comme ça?
unsigned long timerActifDuree = 5000; //Temps du
unsigned long timerActifMillis = millis();
#define timerRestartPin 8 // Bouton pour redémarrer le timer
void setup()
{
Serial.begin(115200);
pinMode(timerRestartPin, INPUT_PULLUP);
}
void loop()
{
if (millis() - timerActifMillis >= timerActifDuree) // Si temps écoulé
{
// tcDisable(); https://gist.github.com/nonsintetic/ad13e70f164801325f5f552f84306d6f
}
else
{
Serial.println("Timer actif\t" + String(millis() - timerActifMillis));
}
// Pour réarmer le timer par un bouton qui mets GND sur la pin timerRestartPin
if (digitalRead(timerRestartPin) == LOW)
{
// tcStartCounter(); ou tcEnable(); je n'ai pas le matériel
timerActifMillis = millis();
}
}
Merci pour ta réponse c'est effectivement ce que je pensais faire , je me demandais juste si des fois il n'existais pas une autre solution en utilisant le timer pour qu'il s'arrête de lui même sur un temps donné.
Une autre approche c'est de désactiver le timer dans l'ISR au bout d'un certain nombre d'appels (par exemple si vous savez que vous appelez le timer toutes les 100ms et que vous voulez désactiver au bout de 5s, vous comptez 50 appels avec une variable statique ) comme ça la loop() reste "propre"