[Question] Cablage data

trimarco232:
on ne peut pas faire fonctionner un programme sans un peu d'analyse

un programme tourne comme ça :
je fais ça, puis ceci, puis cela, et je recommence
je fais ça, puis ceci, puis cela, et je recommence
je fais ça, puis ceci, puis cela, et je recommence
(ad lib en boucle)
dans le cas d'un petit programme, l'ordre de grandeur de la durée d'une boucle est le milliseconde, en d'autres termes, un programme fera "ça, puis ceci, puis cela, et je recommence" 1000 fois par seconde

si dans ton programme tu mets :
"je fais ça, puis si le bouton est appuyé j'envoie la commande pour mettre le strip au vert, et je recommence"
cela fera que si tu appuies sur le bouton pendant 1 seconde, le strip recevra 1000 fois la commande de se mettre au vert (et se demandera 999 fois ce que tu fiches)

il convient par conséquent de n'envoyer la commande qu'une fois, quand le bouton vient d'être appuyé. Pour faire cela il faut avoir en mémoire l'état du bouton dans la boucle précédente (soit 1ms avant, si tu as bien suivi)

pour avoir ceci en mémoire, il faut déclarer puis utiliser une variable, qui dans ce cas peut être booléenne, soit True si le bouton a été appuyé, False si il ne l'a pas été
quand dans ta boucle tu regardes si le bouton est appuyé, il faut distinguer les cas :
1) si oui, appuyé
on regarde comment le bouton était avant
a) si appuyé (bouton1 == true)

  • il n'y a rien de nouveau, on ne fait rien
    b) si non appuyé (bouton1 == false)
  • il y a du nouveau, on envoie la commande correspondant à bouton1 appuyé
  • on n'oublie pas de mettre à jour la variable (bouton1 = true)
    2) si non, pas appuyé
    on regarde comment le bouton était avant
    a) si non appuyé (bouton1 == false)
  • il n'y a rien de nouveau, on ne fait rien
    b) si appuyé (bouton1 == true)
  • il n'y a du nouveau, mais on ne veut rien faire dans ce cas, donc on ne fait rien
  • on n'oublie pas de mettre à jour la variable (bouton1 = false)

Je comprend la logique que tu explique.
Mais sur le code je n'arrive pas bien a concevoir.

    #include <FastLED.h>
    #define BUT1_Appuie HIGH
    #define LED_PIN  2
    #define BUT_PIN 9
    #define NUM_LEDS 118


    int test =0;
    
    CRGB leds[NUM_LEDS];

    void setup() {
     FastLED.addLeds<WS2812B, LED_PIN, GRB>(leds, NUM_LEDS);

     pinMode(LED_PIN, OUTPUT); //L1 est une broche de sortie
     pinMode(BUT_PIN, INPUT); // BP est une broche d'entree

     
    }
    void loop() {
      test = digitalRead(BUT_PIN); // Lecture de l'entree BP et sockage du résultats dans test
      
      if(test != 0) // Si test est à l'état bas
      {
      digitalWrite(LED_PIN, HIGH); // Allumer L1
     
     
      for (int i = 0; i <= 26; i++) {
        leds[i] = CRGB ( 255,255,0);
      }   
      for (int i = 26; i <= 40; i++) {
         leds[i] = CRGB (0,128,0);
      }
      for (int i = 40; i <= 66; i++) {
        leds[i] = CRGB ( 255,255,0);
      } 
      for (int i = 66; i <= 92; i++) {
        leds[i] = CRGB (0,128,0);
      }
      for (int i = 92; i <= 118; i++) {
        leds[i] = CRGB ( 255,255,0);

      }
      FastLED.show(); 
      }
     
      if(test == 0) // Sinon
      {
      digitalWrite(LED_PIN, LOW); // 
     
      for (int i = 0; i <= 118; i++) {
        leds[i] = CRGB ( 0,0,255);

      }
      FastLED.show(); 
      }
}

J'ai rajouter la valeur de depart de mon bouton.
Que je test avec mon loop
Mais il doit me manqué quelque chose