Leds strip/Projet phares arrière. Problème code pour clignoteur

voila mon code en entier

#include <Adafruit_NeoPixel.h>
#define NUMPIXELS      5


Adafruit_NeoPixel clignoGauche = Adafruit_NeoPixel(NUMPIXELS, 5, NEO_RGBW + NEO_KHZ800);
Adafruit_NeoPixel clignoDroit = Adafruit_NeoPixel(NUMPIXELS, 6, NEO_RGBW + NEO_KHZ800);
Adafruit_NeoPixel phareFreinGauche = Adafruit_NeoPixel(NUMPIXELS, 9, NEO_RGB + NEO_KHZ800);
Adafruit_NeoPixel phareFreinDroit = Adafruit_NeoPixel(NUMPIXELS, 10, NEO_RGB + NEO_KHZ800);
Adafruit_NeoPixel freins = Adafruit_NeoPixel(NUMPIXELS, 11, NEO_RGB + NEO_KHZ800);
Adafruit_NeoPixel marcheArriereGauche = Adafruit_NeoPixel(NUMPIXELS, 12, NEO_RGB + NEO_KHZ800);
Adafruit_NeoPixel marcheArriereDroit = Adafruit_NeoPixel(NUMPIXELS, 13, NEO_RGB + NEO_KHZ800);

boolean etat_ClignoGauche = 0;
boolean etat_ClignoDroit = 0;
boolean etat_WarningCligno = 0;
boolean etat_Freins = 0;
boolean etat_MarcheArriere = 0;

int pin_ClignoGauche = 2;
int pin_ClignoDroit = 7;
int pin_WarningCligno = 8;
int pin_Freins = 4;
int pin_MarcheArriere = 3;

 
void setup() 
{
  pinMode(pin_ClignoGauche,INPUT_PULLUP);
  pinMode(pin_ClignoDroit,INPUT_PULLUP);
  pinMode(pin_WarningCligno,INPUT_PULLUP);
  pinMode(pin_Freins,INPUT_PULLUP);
  pinMode(pin_MarcheArriere,INPUT_PULLUP);      

  clignoGauche.begin();
  clignoDroit.begin();
  freins.begin();
  phareFreinGauche.begin();
  phareFreinDroit.begin();
  marcheArriereGauche.begin();
  marcheArriereDroit.begin();

  clignoGauche.show();
  clignoDroit.show();
  freins.show();
  phareFreinGauche.show();
  phareFreinDroit.show();
  marcheArriereGauche.show();
  marcheArriereDroit.show();
    
    for(int i=0; i<=4; i++)
       {
         phareFreinGauche.setPixelColor(i, phareFreinGauche.Color(0,40,0));
         phareFreinDroit.setPixelColor(i, phareFreinDroit.Color(0,40,0));
         delay(80);
         phareFreinGauche.show();
         phareFreinDroit.show();
         
       }
          for(int i=1; i<=2; i++)
             {
               freins.setPixelColor(i, freins.Color(0,40,0));
               delay(80);
               freins.show();
             }

             delay(200);

                for(int i=2; i>=1; i--)
                   {
                     freins.setPixelColor(i, freins.Color(0,255,0));
                     delay(45);
                     freins.show();
                   }
                      for(int i=4; i>=0; i--)
                         {
                           phareFreinGauche.setPixelColor(i, phareFreinGauche.Color(0,255,0));
                           phareFreinDroit.setPixelColor(i, phareFreinDroit.Color(0,255,0));
                           delay(45);
                           phareFreinGauche.show();
                           phareFreinDroit.show();
                         }

                         delay(1000);

                            for(int i=0; i<=4; i++)
                               {
                                 phareFreinGauche.setPixelColor(i, phareFreinGauche.Color(0,0,0));
                                 phareFreinDroit.setPixelColor(i, phareFreinDroit.Color(0,0,0));
                                 phareFreinGauche.show();
                                 phareFreinDroit.show();
                               }
                                  for(int i=0; i<=2; i++)
                                     {
                                       freins.setPixelColor(i, freins.Color(0,0,0));
                                       freins.show();
                                     }

                                     delay(600);

                                        for(int a=36; a<=80; a++)
                                           {
                                           
                                                delay(20);
                                                for(int i=0; i<=2; i++)
                                                   {
                                                    freins.setPixelColor(i, freins.Color(0,a,0));
                                                    freins.setBrightness(a);
                                                    freins.show();
                                                   }
                                                      for(int i=0; i<=4; i++)
                                                         {
                                                           phareFreinGauche.setPixelColor(i, phareFreinGauche.Color(0,a,0));
                                                           phareFreinDroit.setPixelColor(i, phareFreinDroit.Color(0,a,0));
                                                           phareFreinGauche.setBrightness(a);
                                                           phareFreinDroit.setBrightness(a);
                                                           phareFreinGauche.show();                   
                                                           phareFreinDroit.show();
                                                         }
                                            }
}

Fais un CTRL T dans l'IDE pour corriger l'indentation. Il manque la loop aussi...

désolé, voila mon code en entier

#include <Adafruit_NeoPixel.h>
#define NUMPIXELS      5


Adafruit_NeoPixel clignoGauche = Adafruit_NeoPixel(NUMPIXELS, 5, NEO_RGBW + NEO_KHZ800);
Adafruit_NeoPixel clignoDroit = Adafruit_NeoPixel(NUMPIXELS, 6, NEO_RGBW + NEO_KHZ800);
Adafruit_NeoPixel phareFreinGauche = Adafruit_NeoPixel(NUMPIXELS, 9, NEO_RGB + NEO_KHZ800);
Adafruit_NeoPixel phareFreinDroit = Adafruit_NeoPixel(NUMPIXELS, 10, NEO_RGB + NEO_KHZ800);
Adafruit_NeoPixel freins = Adafruit_NeoPixel(NUMPIXELS, 11, NEO_RGB + NEO_KHZ800);
Adafruit_NeoPixel marcheArriereGauche = Adafruit_NeoPixel(NUMPIXELS, 12, NEO_RGB + NEO_KHZ800);
Adafruit_NeoPixel marcheArriereDroit = Adafruit_NeoPixel(NUMPIXELS, 13, NEO_RGB + NEO_KHZ800);

boolean etat_ClignoGauche = 0;
boolean etat_ClignoDroit = 0;
boolean etat_WarningCligno = 0;
boolean etat_Freins = 0;
boolean etat_MarcheArriere = 0;

int pin_ClignoGauche = 2;
int pin_ClignoDroit = 7;
int pin_WarningCligno = 8;
int pin_Freins = 4;
int pin_MarcheArriere = 3;


void setup()
{
  pinMode(pin_ClignoGauche, INPUT_PULLUP);
  pinMode(pin_ClignoDroit, INPUT_PULLUP);
  pinMode(pin_WarningCligno, INPUT_PULLUP);
  pinMode(pin_Freins, INPUT_PULLUP);
  pinMode(pin_MarcheArriere, INPUT_PULLUP);

  clignoGauche.begin();
  clignoDroit.begin();
  freins.begin();
  phareFreinGauche.begin();
  phareFreinDroit.begin();
  marcheArriereGauche.begin();
  marcheArriereDroit.begin();

  clignoGauche.show();
  clignoDroit.show();
  freins.show();
  phareFreinGauche.show();
  phareFreinDroit.show();
  marcheArriereGauche.show();
  marcheArriereDroit.show();

  for (int i = 0; i <= 4; i++)
  {
    phareFreinGauche.setPixelColor(i, phareFreinGauche.Color(0, 40, 0));
    phareFreinDroit.setPixelColor(i, phareFreinDroit.Color(0, 40, 0));
    delay(80);
    phareFreinGauche.show();
    phareFreinDroit.show();

  }
  for (int i = 1; i <= 2; i++)
  {
    freins.setPixelColor(i, freins.Color(0, 40, 0));
    delay(80);
    freins.show();
  }

  delay(200);

  for (int i = 2; i >= 1; i--)
  {
    freins.setPixelColor(i, freins.Color(0, 255, 0));
    delay(45);
    freins.show();
  }
  for (int i = 4; i >= 0; i--)
  {
    phareFreinGauche.setPixelColor(i, phareFreinGauche.Color(0, 255, 0));
    phareFreinDroit.setPixelColor(i, phareFreinDroit.Color(0, 255, 0));
    delay(45);
    phareFreinGauche.show();
    phareFreinDroit.show();
  }

  delay(1000);

  for (int i = 0; i <= 4; i++)
  {
    phareFreinGauche.setPixelColor(i, phareFreinGauche.Color(0, 0, 0));
    phareFreinDroit.setPixelColor(i, phareFreinDroit.Color(0, 0, 0));
    phareFreinGauche.show();
    phareFreinDroit.show();
  }
  for (int i = 0; i <= 2; i++)
  {
    freins.setPixelColor(i, freins.Color(0, 0, 0));
    freins.show();
  }

  delay(600);

  for (int a = 36; a <= 80; a++)
  {

    delay(20);
    for (int i = 0; i <= 2; i++)
    {
      freins.setPixelColor(i, freins.Color(0, a, 0));
      freins.setBrightness(a);
      freins.show();
    }
    for (int i = 0; i <= 4; i++)
    {
      phareFreinGauche.setPixelColor(i, phareFreinGauche.Color(0, a, 0));
      phareFreinDroit.setPixelColor(i, phareFreinDroit.Color(0, a, 0));
      phareFreinGauche.setBrightness(a);
      phareFreinDroit.setBrightness(a);
      phareFreinGauche.show();
      phareFreinDroit.show();
    }
  }
}


void loop()
{
  etat_ClignoGauche = digitalRead(pin_ClignoGauche);
  etat_ClignoDroit = digitalRead(pin_ClignoDroit);
  etat_WarningCligno = digitalRead(pin_WarningCligno);
  etat_Freins = digitalRead(pin_Freins);
  etat_MarcheArriere = digitalRead(pin_MarcheArriere);

  if (etat_ClignoGauche == 0 && etat_ClignoDroit == 1 && etat_WarningCligno == 1)
  {
    codeClignoGauche();
  }


  if (etat_ClignoDroit == 0 && etat_ClignoGauche == 1 && etat_WarningCligno == 1)
  {
    codeClignoDroit();
  }


  if (etat_WarningCligno == 0)
  {

    code_4_Clignotant();
  }


  if (etat_MarcheArriere == 0)
  {
    codeMarcheArriere();
  }
  else
  {
    codeMarcheArriereEteint();
  }


  if (etat_Freins == 0)
  {
    codeFreins();
  }
  else
  {
    codeFreinsEteint();
  }

}


void codeClignoGauche()
{
  for (int i = 0; i <= 4; i++)
  {
    clignoGauche.setPixelColor(i, clignoGauche.Color(80, 255, 0));
    clignoGauche.show();
    delay(30);
  }
  delay(250);
  for (int i = 0; i <= 4; i++)
  {
    clignoGauche.setPixelColor(i, clignoGauche.Color(0, 0, 0));
    clignoGauche.show();
    delay(30);
  }
  delay(250);
}


void codeClignoDroit()
{
  for (int i = 0; i <= 4; i++)
  {
    clignoDroit.setPixelColor(i, clignoDroit.Color(80, 255, 0));
    clignoDroit.show();
    delay(30);
  }
  delay(250);
  for (int i = 0; i <= 4; i++)
  {
    clignoDroit.setPixelColor(i, clignoDroit.Color(0, 0, 0));
    clignoDroit.show();
    delay(30);
  }
  delay(250);
}



void code_4_Clignotant()
{
  for (int i = 0; i <= 4; i++)
  {
    clignoGauche.setPixelColor(i, clignoGauche.Color(70, 255, 0));
    clignoDroit.setPixelColor(i, clignoDroit.Color(70, 255, 0));
    clignoGauche.show();
    clignoDroit.show();
    delay(30);
  }
  delay(250);
  for (int i = 0; i <= 4; i++)
  {
    clignoGauche.setPixelColor(i, clignoGauche.Color(0, 0, 0));
    clignoDroit.setPixelColor(i, clignoDroit.Color(0, 0, 0));
    clignoGauche.show();
    clignoDroit.show();
    delay(30);
  }
  delay(250);
}


void codeMarcheArriere()
{
  for (int i = 0; i <= 4; i++)
  {
    marcheArriereGauche.setPixelColor(i, marcheArriereGauche.Color(50, 100, 40));
    marcheArriereDroit.setPixelColor(i, marcheArriereDroit.Color(50, 100, 40));
    marcheArriereGauche.show();
    marcheArriereDroit.show();
  }
}


void codeMarcheArriereEteint()
{
  for (int i = 0; i <= 4; i++)
  {
    marcheArriereGauche.setPixelColor(i, marcheArriereGauche.Color(0, 0, 0));
    marcheArriereDroit.setPixelColor(i, marcheArriereDroit.Color(0, 0, 0));
    marcheArriereGauche.show();
    marcheArriereDroit.show();
  }
}

void codeFreins()
{
  for (int i = 0; i <= 2; i++)
  {
    freins.setPixelColor(i, freins.Color(0, 255, 0));
    freins.setBrightness(255);
    freins.show();
  }
  for (int i = 4; i >= 0; i--)
  {
    phareFreinGauche.setPixelColor(i, phareFreinGauche.Color(0, 255, 0));
    phareFreinDroit.setPixelColor(i, phareFreinDroit.Color(0, 255, 0));
    phareFreinGauche.setBrightness(255);
    phareFreinDroit.setBrightness(255);
    phareFreinGauche.show();
    phareFreinDroit.show();
    delay(40);
  }
}


void codeFreinsEteint()
{
  for (int i = 0; i <= 4; i++)
  {
    phareFreinGauche.setPixelColor(i, phareFreinGauche.Color(0, 80, 0));
    phareFreinDroit.setPixelColor(i, phareFreinDroit.Color(0, 80, 0));
    phareFreinGauche.setBrightness(80);
    phareFreinDroit.setBrightness(80);
    phareFreinGauche.show();
    phareFreinDroit.show();
  }
  for (int i = 0; i <= 2; i++)
  {
    freins.setPixelColor(i, freins.Color(0, 80, 0));
    freins.setBrightness(80);
    freins.show();
  }

}

je viens de poster une video sur youtube. ca aidera a mieux comprendre ce que j'aimerais faire. voici le lien.

j'ai réussi a remplacer mes delay par la fonction millis() mais je n'arrive pas a faire fonctionner une machine a état dans mon code. Je remémore le projet. j'ai deux boutons poussoir(etat_clignoGauche) et (etat_clignoDroit) qui commande chacun une bande leds.

Quand j'appuie sur le BP (etat_clignoGauche), les leds de la bande de gauche commence, et reste allumer dans cet ordre :de 0 a 1, de 1 a 2, jusqu'a ce quelle soit toutes allumées, puis elles s'éteignent dans le meme ordre : de 0 a 1, de 1 a 2, jusqu'a ce qu'elles soit toutes éteintes. Le BP (etat_clignoDroit) agit exactement de la meme facon sur la bande led de droite, normal, c'est des clignoteur.

Dès que j'appuie sur BP (etat_clignoGauche), les leds de la bande de gauche font leur cycles.
Si j'appuie sur BP (etat_clignoDroit) directement apres avoir relaché BP (etat_clignoGauche), les leds de la bande de droite commenceront a s'allumer que quand la bande de gauche aura terminé sont cycle. Meme chose dans le sens inverse

Ce que j'aimerais, c'est que dès que j'appuie sur le bouton, la bande concerné s'allume et l'autre s'éteint instantanément.

Merci d'avance pour vos aident
voici le code

#include <Adafruit_NeoPixel.h>
#define NUMPIXELS 5

Adafruit_NeoPixel clignoGauche = Adafruit_NeoPixel(NUMPIXELS, 5, NEO_RGBW + NEO_KHZ800);
Adafruit_NeoPixel clignoDroit = Adafruit_NeoPixel(NUMPIXELS, 6, NEO_RGBW + NEO_KHZ800);

boolean etat_ClignoGauche = 0;
boolean etat_ClignoDroit = 0;

int pin_ClignoGauche = 2;
int pin_ClignoDroit = 7;

long prevMillis = 0;
int allumageClignoGaucheEtDroit = 30;
int tempsAttenteHighEtLow = 50;

void setup()
{
  Serial.begin(9600);
  pinMode(pin_ClignoGauche, INPUT_PULLUP);
  pinMode(pin_ClignoDroit, INPUT_PULLUP);

  clignoGauche.begin();
  clignoDroit.begin();

  clignoGauche.show();
  clignoDroit.show();
}


void loop()
{
  etat_ClignoGauche = digitalRead(pin_ClignoGauche);
  etat_ClignoDroit = digitalRead(pin_ClignoDroit);

  if (etat_ClignoGauche == 0 && etat_ClignoDroit == 1)
  {
    codeClignoGauche();
  }
  if (etat_ClignoDroit == 0 && etat_ClignoGauche == 1)
  {
    codeClignoDroit();
  }
}

void codeClignoGauche()
{
  for (int i = 0; i <= 4; i)
  {
    if ( millis() - prevMillis > allumageClignoGaucheEtDroit) {
      prevMillis = millis();
      clignoGauche.setPixelColor (i, clignoGauche.Color(80, 255, 0));
      clignoGauche.show();
      i++;
    }
  }
  for (int i = 0; i <= 4; i)
  {
    if ( millis() - prevMillis > tempsAttenteHighEtLow ) {
      prevMillis = millis();
      clignoGauche.setPixelColor (i, clignoGauche.Color(80, 255, 0));
      clignoGauche.show();
      i++;
    }
  }
  for (int i = 0; i <= 4; i)
  {
    if ( millis() - prevMillis > allumageClignoGaucheEtDroit) {
      prevMillis = millis();
      clignoGauche.setPixelColor(i, clignoGauche.Color(0, 0, 0));
      clignoGauche.show();
      i++;
    }
  }
  for (int i = 0; i <= 4; i)
  {
    if ( millis() - prevMillis > tempsAttenteHighEtLow ) {
      prevMillis = millis();
      clignoGauche.setPixelColor (i, clignoGauche.Color(0, 0, 0));
      clignoGauche.show();
      i++;
    }
  }
}

void codeClignoDroit()
{

  for (int i = 0; i <= 4; i)
  {
    if ( millis() - prevMillis > allumageClignoGaucheEtDroit) {
      prevMillis = millis();
      clignoDroit.setPixelColor (i, clignoDroit.Color(80, 255, 0));
      clignoDroit.show();
      i++;
    }
  }
  for (int i = 0; i <= 4; i)
  {
    if ( millis() - prevMillis > tempsAttenteHighEtLow ) {
      prevMillis = millis();
      clignoDroit.setPixelColor (i, clignoDroit.Color(80, 255, 0));
      clignoDroit.show();
      i++;
    }
  }
  for (int i = 0; i <= 4; i)
  {
    if ( millis() - prevMillis > allumageClignoGaucheEtDroit) {
      prevMillis = millis();
      clignoDroit.setPixelColor(i, clignoDroit.Color(0, 0, 0));
      clignoDroit.show();
      i++;
    }
  }
  for (int i = 0; i <= 4; i)
  {
    if ( millis() - prevMillis > tempsAttenteHighEtLow ) {
      prevMillis = millis();
      clignoDroit.setPixelColor (i, clignoDroit.Color(0, 0, 0));
      clignoDroit.show();
      i++;
    }
  }
}

pouvez vous dessiner un diagramme des états (comme les ronds dans mon tuto)

et Pour simplifier votre gestion des boutons, utilisez la librairie de @bricoleau

voici le diagramme d'une partie de mon code qui comporte 2 bandes leds commandées par 2 boutons. Un bouton pour chaque bandes leds.

voici votre dessin:

vous nous expliquez comment ça se lit ?

Voici une tentative d'approche de votre projet - je sépare volontairement les étapes pour que ce soit simple à comprendre, au codage bien sûr il faudra regrouper certains états

Au départ, état INITIAL, les 2 bandeaux sont éteints

Imaginons que vous ayez l'évènement "bouton GAUCHE", la première LED de gauche doit s'allumer

puis imaginez que vous ayez l'évènement "20ms écoulées", il faut allumer la deuxième LED

et ainsi de suite jusqu'à allumage complet du bandeau, puis extinction progressive et là on recommence

Bien sûr de manière symétrique on à la même chose à droite

Maintenant imaginons qu'on veuille arrêter le clignotant gauche alors qu'on est en train de clignoter à Gauche --> Quand on reçoit l'évènement "bouton GAUCHE", on revient alors à l'état de départ.

cela est bien sûr valable quel que soit l'état de clignotement à gauche

et de manière similaire on aura la même chose à droite si on reçoit l'événement 'Bouton DROITE"

Maintenant si je suis en train de clignoter à gauche et que l'on reçoit l'événement 'Bouton DROITE", vous voulez interrompre le clignotement de gauche et démarrer celui de droite. On doit donc aussi avoir les transitions suivantes:

et de manière symétrique, si vous êtes en train de clignoter à droite et que que l'on reçoit l'événement 'Bouton GAUCHE", vous voulez interrompre le clignotement de droite et démarrer celui de gauche. On doit donc aussi avoir les transitions suivantes:

On voit qu'il faut donc savoir gérer 3 événements, GAUCHE, DROITE et 20ms écoulées. Je ne représente pas le graphe avec toutes les flèches parce que ce serait illisible mais je suppose que vous comprenez le principe.

On peut coder comme cela mais c'est un peu lourd, surtout si on ne connait pas le nombre de LEDs. Dans ce cas comme dans tous les états de clignotement à gauche ou droite on attend les mêmes évènements, on peut les regrouper et traiter la LED à allumer ou éteindre avec une variable spécifique à cet état, qu'on prendra soin de remettre à sa valeur initiale quand on sort du clignotement en cours.

Voilà - à vous de jouer :slight_smile:

Les flèches correspondent aux états des boutons.

Flèche verte pour bouton gauche appuyé.
Flèche bleu pour bouton droit appuyé.
Flèche grise pour boutons relachés.

Les ronds correspondent a l'allumage ou a l'extinction des bandes leds.

Rond GRIS anneaux VERT(bas): Etat bouton GAUCHE sur LOW donc, bande leds GAUCHE éteinte.(BP relaché, flèche grise)

Rond GRIS anneaux BLEU(haut): Etat bouton DROITE sur LOW donc, bande leds DROITE éteinte.(BP relaché, flèche grise)

Rond VERT(gauche): Etat bouton GAUCHE sur HIGH donc, bande leds GAUCHE allumé.(BP appuyé, petite flèche verte )

Rond BLEU(droit): Etat bouton DROIT sur HIGH donc, bande leds DROITE allumé.(BP appuyé,petite flèche bleu)

Si j'appuie sur le bouton gauche(grande flèche bleu) alors que le bouton droit est appuyé, la bande leds de droite doit immédiatement s'éteindre et la bande leds de gauche doit immédiatement s'allumé.

inversément

Si j'appuie sur le bouton droit(grande flèche verte) alors que le bouton gauche est appuyé, la bande leds de gauche doit immédiatement s'éteindre et la bande leds de droite doit immédiatement s'allumé.

Ce que je n'arrive pas a faire, c'est de stopper la boucle for(int i=0; i<=4; i++) du dynamisme des leds.
Il faut a chaque fois attendre que la boucle du cligno droit se termine pour que la boucle du cligno gauche commence et inversément.

je vous remet une partie de mon code(que les 2 boutons cligno gauche et cligno droit) en sachant qu'il y a encore 4 autres boutons a imbriquer dans mon code.

#include <Adafruit_NeoPixel.h>
#define NUMPIXELS 5

Adafruit_NeoPixel clignoGauche = Adafruit_NeoPixel(NUMPIXELS, 5, NEO_RGBW + NEO_KHZ800);
Adafruit_NeoPixel clignoDroit = Adafruit_NeoPixel(NUMPIXELS, 6, NEO_RGBW + NEO_KHZ800);

boolean etat_ClignoGauche = 0;
boolean etat_ClignoDroit = 0;

int pin_ClignoGauche = 2;
int pin_ClignoDroit = 7;

long prevMillis = 0;
int tempo_AllumageClignoGaucheEtDroit = 30;
int tempo_ResteAllumeClignoGaucheEtDroit = 50;
int tempo_EteintClignoGaucheEtDroit = 30;
int tempo_ResteEteintClignoGaucheEtDroit = 50;

void setup()
{
  Serial.begin(9600);
  pinMode(pin_ClignoGauche, INPUT_PULLUP);
  pinMode(pin_ClignoDroit, INPUT_PULLUP);

  clignoGauche.begin();
  clignoDroit.begin();

  clignoGauche.show();
  clignoDroit.show();
}

void loop()
{
  etat_ClignoGauche = digitalRead(pin_ClignoGauche);
  etat_ClignoDroit = digitalRead(pin_ClignoDroit);

  if (etat_ClignoGauche == 0 && etat_ClignoDroit == 1)
  {
    codeClignoGauche();
  }

  if (etat_ClignoDroit == 0 && etat_ClignoGauche == 1)
  {
    codeClignoDroit();
  }
}

void codeClignoGauche()
{
  for (int i = 0; i <= 4; i)
  {
    if ( millis() - prevMillis > tempo_AllumageClignoGaucheEtDroit)
    {
      prevMillis = millis();
      clignoGauche.setPixelColor (i, clignoGauche.Color(80, 255, 0));
      clignoGauche.show();
      i++;
    }
  }
  for (int i = 0; i <= 4; i)
  {
    if ( millis() - prevMillis > tempo_ResteAllumeClignoGaucheEtDroit)
    {
      prevMillis = millis();
      clignoGauche.setPixelColor (i, clignoGauche.Color(80, 255, 0));
      clignoGauche.show();
      i++;
    }
  }
  for (int i = 0; i <= 4; i)
  {
    if ( millis() - prevMillis > tempo_EteintClignoGaucheEtDroit)
    {
      prevMillis = millis();
      clignoGauche.setPixelColor(i, clignoGauche.Color(0, 0, 0));
      clignoGauche.show();
      i++;
    }
  }
  for (int i = 0; i <= 4; i)
  {
    if ( millis() - prevMillis > tempo_ResteEteintClignoGaucheEtDroit)
    {
      prevMillis = millis();
      clignoGauche.setPixelColor (i, clignoGauche.Color(0, 0, 0));
      clignoGauche.show();
      i++;
    }
  }
}

void codeClignoDroit()
{

  for (int i = 0; i <= 4; i)
  {
    if ( millis() - prevMillis > tempo_AllumageClignoGaucheEtDroit)
    {
      prevMillis = millis();
      clignoDroit.setPixelColor (i, clignoDroit.Color(80, 255, 0));
      clignoDroit.show();
      i++;
    }
  }
  for (int i = 0; i <= 4; i)
  {
    if ( millis() - prevMillis > tempo_ResteAllumeClignoGaucheEtDroit)
    {
      prevMillis = millis();
      clignoDroit.setPixelColor (i, clignoDroit.Color(80, 255, 0));
      clignoDroit.show();
      i++;
    }
  }
  for (int i = 0; i <= 4; i)
  {
    if ( millis() - prevMillis > tempo_EteintClignoGaucheEtDroit)
    {
      prevMillis = millis();
      clignoDroit.setPixelColor(i, clignoDroit.Color(0, 0, 0));
      clignoDroit.show();
      i++;
    }
  }
  for (int i = 0; i <= 4; i)
  {
    if ( millis() - prevMillis > tempo_ResteEteintClignoGaucheEtDroit)
    {
      prevMillis = millis();
      clignoDroit.setPixelColor (i, clignoDroit.Color(0, 0, 0));
      clignoDroit.show();
      i++;
    }
  }
}

Ce que je n'arrive pas a faire, c'est de stopper la boucle for(int i=0; i<=4; i++) du dynamisme des leds.
Il faut a chaque fois attendre que la boucle du cligno droit se termine pour que la boucle du cligno gauche commence et inversément.

oui puisque dans la boucle vous ne traitez pas les événements. vous ne pouvez pas avoir de boucle for qui fait une attente active, il faut remonter toujours au début de la loop.

Regardez un peu les dessins que j'ai mis plus haut, il faut changer la notion de second click sur le bouton droite ou gauche pour relâchement du bouton, mais c'est la même chose, juste un événement à traiter

merci pour l'explication, c'est du lourd. ce n'est pas comme le charabia que je viens de poster. Je vais continuer a essayer de faire aller ce code de mysère. Merci encore pour l'explication

tenez à guise d'exemple avec un affichage dans la console Série (à 115200 bauds) et pour simplifier la gestion des boutons, j'ai pris la librairie de @bricoleau

ça devrait se lire comme le dessin que j'ai fait ci dessus sauf que j'ai regroupés les états où on ne fait qu'avancer l'allumage des pixels dans une fonction etapeSuivante() qui calcule ce qu'il faut faire (on lui donne en param le tableau représentant les pixels à traiter)

#include <simpleBouton.h> // http://forum.arduino.cc/index.php?topic=375232.0

const byte NUMPIXELS  = 5;
byte pixelsDroite[NUMPIXELS];
byte pixelsGauche[NUMPIXELS];
enum : byte {ETEINT, ALLUME};

const byte pin_ClignoGauche = 2;
const byte pin_ClignoDroit = 7;

simpleBouton boutonGauche(pin_ClignoGauche); //Cablage : pin---BP---GND (le bouton sera en INPUT_PULLUP)
simpleBouton boutonDroite(pin_ClignoDroit); //Cablage : pin---BP---GND (le bouton sera en INPUT_PULLUP)

enum : byte {REPOS, CLIGNOTE_GAUCHE, CLIGNOTE_DROITE} etat;

unsigned long chrono;
const unsigned long periodeClignotement = 1000ul; // ici 1s pour qu'on voit ce qu'il se passe, 20ul pour 20ms

void afficherPixels()
{
  Serial.print(F("["));
  for (int i = NUMPIXELS - 1; i >= 0 ; i--)
      if (pixelsGauche[i] == ETEINT) Serial.write('0'); else Serial.write('1');

  Serial.print(F("]\t\t["));

  for (int i = 0; i < NUMPIXELS; i++)
      if (pixelsDroite[i] == ETEINT) Serial.write('0'); else Serial.write('1');
  Serial.println(F("]"));
}

void etapeSuivante(byte bandeDePixel[])
{
  int unPixel;

  for (unPixel = 0; unPixel < NUMPIXELS; unPixel++)
    if (bandeDePixel[unPixel] == ALLUME) break;

  if (unPixel == NUMPIXELS) bandeDePixel[0] = ALLUME;  // s'ils sont tous éteint c'est qu'on commence
  else {
    // si le premier pixel est allumé et pas le dernier c'est qu'on "monte"
    if ((bandeDePixel[0] == ALLUME) && (bandeDePixel[NUMPIXELS - 1] == ETEINT)) {
      // on cherche le premier pas allumé et on l'allume
      for (unPixel = 0; unPixel < NUMPIXELS; unPixel++) {
        if (bandeDePixel[unPixel] == ETEINT) {
          bandeDePixel[unPixel] = ALLUME;
          break;
        }
      }
    } else {
      // c'est qu'on descend
      // on cherche le premier allumé et on l'éteint
      for (unPixel = 0; unPixel < NUMPIXELS; unPixel++) {
        if (bandeDePixel[unPixel] == ALLUME) {
          bandeDePixel[unPixel] = ETEINT;
          break;
        }
      }
    }
  }
  // on rend visible notre modif
  afficherPixels();
}

void mettreAuRepos()
{
  for (byte i = 0; i < NUMPIXELS; i++) {
    pixelsDroite[i] = ETEINT;
    pixelsGauche[i] = ETEINT;
  }
  afficherPixels();
  etat = REPOS;
}

void actualiserLesBoutons()
{
  boutonGauche.actualiser();
  boutonDroite.actualiser();
}

void setup() {
  Serial.begin(115200);
  mettreAuRepos();
}

void loop() {

  // on teste les boutons
  actualiserLesBoutons();

  // on prend une décision
  switch (etat) {
    case REPOS:
      if (boutonGauche.estEnfonce()) {
        chrono = millis();
        etapeSuivante(pixelsGauche);
        etat = CLIGNOTE_GAUCHE;
      }
      else if (boutonDroite.estEnfonce()) {
        chrono = millis();
        etapeSuivante(pixelsDroite);
        etat = CLIGNOTE_DROITE;
      }
      break;

    case CLIGNOTE_GAUCHE:
      if (boutonGauche.vientDEtreRelache()) mettreAuRepos();
      else if (millis() - chrono >= periodeClignotement) {
        etapeSuivante(pixelsGauche);
        chrono += periodeClignotement;
      }
      else if (boutonDroite.vientDEtreEnfonce()) {
        mettreAuRepos();
        chrono = millis();
        etapeSuivante(pixelsDroite);
        etat = CLIGNOTE_DROITE;
      }
      break;

    case CLIGNOTE_DROITE:
      if (boutonDroite.estRelache()) mettreAuRepos();
      else if (millis() - chrono >= periodeClignotement) {
        etapeSuivante(pixelsDroite);
        chrono += periodeClignotement;
      }
      else if (boutonGauche.vientDEtreEnfonce()) {
        mettreAuRepos();
        chrono = millis();
        etapeSuivante(pixelsGauche);
        etat = CLIGNOTE_GAUCHE;
      }
      break;
  }
}

Merci encore pour toutes ces explications. Mon exemple de code que vous avez modifier m'aide énormément a comprendre comment cela fonctionne. J'ai bien les 0 et les 1 qui défilent quand j'appuie sur les boutons.(c'est bien fait d'ailleurs) mais ca ne fonctionne que si je passe le serial.begin a 9600. Pouvez vous me dire pourquoi? l'autre petit souci c'est que mes leds ne s'allume pas, croyez vous que c'est a cause de la bibliothèque adafruit neopixel qui n'est pas présente?

mais ca ne fonctionne que si je passe le serial.begin a 9600

Sans doute parce que dans le pop up associé à la console série vous avez choisi 9600 —> passer ça à 115200

Bien sûr c’est une démo sans LEDs... je vous montre comment gérer cela dans un tableau et l’imprimer —> à adapter à votre code, mettre les librairies pour les pixels et modifier à la fois potentiellement la gestion du tableau et la fonction d'affichage pour adapter à votre cas

Je vous assure que je fais tout pour comprendre et faire fonctionner tout ca, mais ou bout d'un moment, je mélange tout. La seul chose que je sais faire, c'est recopier un code qui correspond plus ou moins a mon montage, et le modifier tant bien que mal pour avoir un résultat plus ou moins espérer. Pour moi, c'est comme un jeu d'échec ou il faudrait avoir 100 coups d'avance pour pouvoir gagné, ce qui pour moi, est impossible. Allumé une led et la faire clignoter, ok, c'est dans mes cordes mais je suis arrivé a un stade ou je ne comprend plus rien. Svp pourriez vous modifier mon code pour que mes bandes leds fonctionnent comme dans le serial moniteur ?

Remplacez mes tableaux par vos tableaux de LEDs et modifiez la fonction afficherPixels() pour qu’elle appelle la fonction d’allumage des bandeaux au lieu d’imprimer sur le port série

je n'y arrive pas.

postez votre essai...