Bonjour,
Ceci est un post de partage, voici une petit code que je viens de faire pour moi, et je me demande si ça peut aider quelqu'un, mais aussi ce que vous en pensez (optimisation ?)
Le but est d'utiliser la LED pour renseigner un peu l'utilisateur sur l'activité de la LOOP, dans le cas ou est elle contient principalement une grosse condition.
La fonction Activity ressemble à "BlinkWithoutDelay", elle fait principalement clignoter la LED, mais elle sert aussi à relever les compteurs de boucles.
#define LED_PIN 13
#define MONIT_PERIOD 1000 // délai en millisecondes pour relever les compteurs de boulces
#define BLINK_PERIOD 300 // délai en millisecondes de la période de clignotement de la LED (On+off)
unsigned int durationOn,durationOff; // Dutées allumée et durée éteinte (le total est égal à refreshPeriod)
unsigned int loopAct,loopPas; // Compteurs de boucles actives et passives
unsigned long lastMonit,lastBlink; // timeStamp du dernier relevé des compteur et du dernier clignotement
boolean ledState; // Statut de la LED
void setup() {
pinMode(LED_PIN, OUTPUT);
}
void loop() {
if (loopAct<18000) {
loopAct++; // Incrémente le compteur de boucles actives
}
else loopPas++; // Incrémente le compteur de boucles passives
activity(); // Lance la fonction de de "monitoring"
}
void activity() {
if (ledState) // SI la LED est allumée...
{
if (millis()>lastBlink+durationOn) // ...et SI la durée d'allumage est ateinte...
{
lastBlink=millis(); // ...timestamp du clignotement actuel...
ledState = false; // ...extinction du flag et de la LED...
digitalWrite(LED_PIN,LOW);
}
}
else // mais SI la LED est eteinte...
{
if (millis()>lastBlink+durationOff) // ...et SI la durée d'extinction est ateinte...
{
lastBlink=millis(); // ...timestamp du clignotement actuel...
ledState = true; // ...allumage du flag et de la LED.
digitalWrite(LED_PIN,HIGH);
}
}
if (millis()>lastMonit+MONIT_PERIOD) // Si la période de relevé des compteur est atteinte...
{
lastMonit=millis();
durationOn=map(loopAct,0,loopAct+loopPas,0,BLINK_PERIOD); // ...Calcul de la durée allumée de la LED...
durationOff=BLINK_PERIOD-durationOn; // ...déduction de la durée éteinte de la LED...
loopAct=0; // ...remise à 0 des compteurs de boucles
loopPas=0;
}
}
Les informations fournies en fonction des cas :
-
Ma LED clignote ON/OFF avec aucune prédominance très marquée
-
J'ai passé le "setup" et je suis dans la "loop"
-
Ma condition n'est pas toujours vraie, ni toujours fausse et il reste des ressources dispo
-
Ma LED s'allume très peu
-
La condition n'est jamais remplie (très léger flash)
-
la boucle active consomme très peu de ressources
-
Ma LED s'allume beaucoup
-
La boucle active est gourmande
-
La condition est toujours vraie (allumage fixe, sans clignotement)