millis() oui mais ...

Hello,
Je souhaite utiliser des LEDS dans mon projet. Certaines sont fixes, d'autres clignotent en fonction des evènements
J'utilise les fonctions suivantes :

int LEDdisplay::cliLED()
{
if(millis() < (timerLED + 150)) { return 1; }
if(millis() >= (timerLED + 150) && millis() < (timerLED + 300)) { return 0; }
if(millis() >= (timerLED + 300)) { resetLED(); return 1; }
}
void LEDdisplay::resetLED()
{
timerLED = millis();
}

cliLED(1) allume bien la led, cliLED(0) éteint la LED : pas de problème
J'ai plusieurs fonctions similaires mais avec un interval de clignotement différent.
Je souhaite rajouter d'autres LEDS, gérées via la fonction boucle d'attente delayWithMillis(t) ci-dessous.

// Fonction d'attente en remplacement de la fonction delay()
void delayWithMillis(unsigned long t) {

// Calcul du temps lorsque t millisecondes se seront ecoules
unsigned long stopTime = millis() + t;
// Attente active jusqu'a ce que stopTime soit atteint
while ( millis() < stopTime ) {
}
}

Mon problème est que le clignotement des LEDS devient complètement anarchique, comme si les timer étaient tous inter-dépendants malgré le non usage de la fonction delay()
Où est mon erreur ?

J'ai plusieurs fonctions similaires mais avec un intervalle de clignotement différent

as-tu essayé de trouver une bibliothèque qui va bien ?
(si non j'ai déjà fait, mais en codant ...)

moi pour faire ça j'utilise ça : Google Code Archive - Long-term storage for Google Code Project Hosting.

Hum, il semblerait que la lib citée ne soit pas du domaine publique, le telechargement est interdit :frowning:
ai trouvé sous : https://github.com/martin-podlubny/arduino-library-syncled

C'est le même ?

oui c'est le même.

Ok, testé rapidement avec une led, ça marche :wink:
Donc si je multiplie le code pour chaque led concernée, leur clignotement sera totalement indépendant des autres et sans perturbation ?

j'ai utilisé jusqu'a 5 leds avec sans soucis

vu le code je vois pas ce qui pourrait géner, même avec 10 leds ou plus. tu ne sera limité que par le nombre de pins de sortie :slight_smile:

Notez cependant que   if(millis() < (timerLED + 150))      { return 1; }n'est pas robuste lorsque millis() va retourner à zéro dans 50 jours il faut toujours écrire les tests sous cette forme (avec une soustraction)

if (millis()-timeLED < 150) {....