Conseil sur la gestion d'un timer

Bonjour à tous,

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?

Bonjour simon884

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();
	}
}

Bon amusement
Cordialement
jpbbricole

Merci pour ta réponse c'est effectivement ce que je pensais faire :grinning:, 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"

Ah oui pas mal ça me plait comme approche ça, je vais me renseigner sur la chose :grinning:

cela dit pour faire un truc à 2Hz, on peut faire ça directement dans la loop avec millis() :slight_smile: