Je n'arrive pas à changer d'animation d'une matrice led (bandeau led / FastLED)

Bonjour,
Voici mon problème : J'utilise un bandeau led adressable de 85 leds en tant que matrice led (17 par 5). J'essaye de faire un programme qui me permet de changer d'animation (que j'ai créé) avec une télécommande IR. J'ai déjà pu améliorer mon code en enlevant tout les delay() qui m'empêchait de lire le bouton de la télécommande en même temps qu'une animation. Mais mon problème est toujours présent : je n'arrive pas à changer l'animation de la matrice avec ma télécommande. Enfin, je peux seulement si l'animation est à une vitesse lente, mais si j'augmente la vitesse d'animation, c'est comme si le programme n'avait pas le temps de lire l'information de la télécommande. (les variables de vitesses des animation sont : "const long interval_remplir = 200;" et "const long interval_scan = 200;"

Voici le code :

//Librairie
#include <FastLED.h>
#include <IRremote.h>

//====== FastLED ========
#define NUM_LEDS 85
#define DATA_PIN 3
CRGB leds[NUM_LEDS];
//=======================

//====== IRremote ========
const char DIN_RECEPTEUR_IR = 4;
IRrecv recepteurIR(DIN_RECEPTEUR_IR);
decode_results messageRecu;
//========================

//====== Variables de temps ======
unsigned long previousMillis_remplir = 0;
const long interval_remplir = 200;
int start_remplir = 0;

unsigned long previousMillis_scan = 0;
const long interval_scan = 200;
int start_scan = 0;

//================================

//====== Variables de States ======
int State_remplir;
int State_scan;
//=================================

//====== Variables effectState ======
int effectState;
const int remplir = 1;
const int scan = 2;
//===================================

void setup() {
  recepteurIR.enableIRIn();
  recepteurIR.blink13(true);

  FastLED.addLeds<NEOPIXEL, DATA_PIN>(leds, NUM_LEDS);
  FastLED.clear(); // éteint toutes les leds

  Serial.begin(9600);
  noEffectFunc();
}

void loop() {
  read_IR_remote();
  switch (effectState) {
    case 1:
      remplirFunc();
      break;
    case 2:
      scanFunc();
      break;
  }
}

void noEffectFunc() {
  for (int i; i < NUM_LEDS; i++) {
    leds[i] = CRGB::Black;
  }
  FastLED.show();
  Serial.println("Reset Leds");
}

void remplirFunc() {
  unsigned long currentMillis_remplir = millis();
  if ((currentMillis_remplir - previousMillis_remplir) >= interval_remplir) {
    switch (State_remplir) {
      case 0:
        FastLED.clear();
        leds[0] = CRGB::Red;
        leds[33] = CRGB::Red;
        leds[34] = CRGB::Red;
        leds[67] = CRGB::Red;
        leds[68] = CRGB::Red;
        State_remplir = 1;
        break;
      case 1:
        leds[1] = CRGB::Red;
        leds[32] = CRGB::Red;
        leds[35] = CRGB::Red;
        leds[66] = CRGB::Red;
        leds[69] = CRGB::Red;
        State_remplir = 2;
        break;
      case 2:
        leds[2] = CRGB::Red;
        leds[31] = CRGB::Red;
        leds[36] = CRGB::Red;
        leds[65] = CRGB::Red;
        leds[70] = CRGB::Red;
        State_remplir = 3;
        break;
      case 3:
        leds[3] = CRGB::Red;
        leds[30] = CRGB::Red;
        leds[37] = CRGB::Red;
        leds[64] = CRGB::Red;
        leds[71] = CRGB::Red;
        State_remplir = 4;
        break;
      case 4:
        leds[4] = CRGB::Red;
        leds[29] = CRGB::Red;
        leds[38] = CRGB::Red;
        leds[63] = CRGB::Red;
        leds[72] = CRGB::Red;
        State_remplir = 5;
        break;
      case 5:
        leds[5] = CRGB::Red;
        leds[28] = CRGB::Red;
        leds[39] = CRGB::Red;
        leds[62] = CRGB::Red;
        leds[73] = CRGB::Red;
        State_remplir = 6;
        break;
      case 6:
        leds[6] = CRGB::Red;
        leds[27] = CRGB::Red;
        leds[40] = CRGB::Red;
        leds[61] = CRGB::Red;
        leds[74] = CRGB::Red;
        State_remplir = 7;
        break;
      case 7:
        leds[7] = CRGB::Red;
        leds[26] = CRGB::Red;
        leds[41] = CRGB::Red;
        leds[60] = CRGB::Red;
        leds[75] = CRGB::Red;
        State_remplir = 8;
        break;
      case 8:
        leds[8] = CRGB::Red;
        leds[25] = CRGB::Red;
        leds[42] = CRGB::Red;
        leds[59] = CRGB::Red;
        leds[76] = CRGB::Red;
        State_remplir = 9;
        break;
      case 9:
        leds[9] = CRGB::Red;
        leds[24] = CRGB::Red;
        leds[43] = CRGB::Red;
        leds[58] = CRGB::Red;
        leds[77] = CRGB::Red;
        State_remplir = 10;
        break;
      case 10:
        leds[10] = CRGB::Red;
        leds[23] = CRGB::Red;
        leds[44] = CRGB::Red;
        leds[57] = CRGB::Red;
        leds[78] = CRGB::Red;
        State_remplir = 11;
        break;
      case 11:
        leds[11] = CRGB::Red;
        leds[22] = CRGB::Red;
        leds[45] = CRGB::Red;
        leds[56] = CRGB::Red;
        leds[79] = CRGB::Red;
        State_remplir = 12;
        break;
      case 12:
        leds[12] = CRGB::Red;
        leds[21] = CRGB::Red;
        leds[46] = CRGB::Red;
        leds[55] = CRGB::Red;
        leds[80] = CRGB::Red;
        State_remplir = 13;
        break;
      case 13:
        leds[13] = CRGB::Red;
        leds[20] = CRGB::Red;
        leds[47] = CRGB::Red;
        leds[54] = CRGB::Red;
        leds[81] = CRGB::Red;
        State_remplir = 14;
        break;
      case 14:
        leds[14] = CRGB::Red;
        leds[19] = CRGB::Red;
        leds[48] = CRGB::Red;
        leds[53] = CRGB::Red;
        leds[82] = CRGB::Red;
        State_remplir = 15;
        break;
      case 15:
        leds[15] = CRGB::Red;
        leds[18] = CRGB::Red;
        leds[49] = CRGB::Red;
        leds[52] = CRGB::Red;
        leds[83] = CRGB::Red;
        State_remplir = 16;
        break;
      case 16:
        leds[16] = CRGB::Red;
        leds[17] = CRGB::Red;
        leds[50] = CRGB::Red;
        leds[51] = CRGB::Red;
        leds[84] = CRGB::Red;
        State_remplir = 17;
        break;
      case 17:
        fill_solid(leds, NUM_LEDS, CRGB::Black);
        previousMillis_remplir = 0;
        State_remplir = 0;
        break;
    }
    FastLED.show();
    previousMillis_remplir = currentMillis_remplir;
  }
}

void scanFunc() {
  unsigned long currentMillis_scan = millis();
  if ((currentMillis_scan - previousMillis_scan) >= interval_scan) {
    switch (State_scan) {
      case 0:
        FastLED.clear();
        leds[0] = CRGB::Red;
        leds[33] = CRGB::Red;
        leds[34] = CRGB::Red;
        leds[67] = CRGB::Red;
        leds[68] = CRGB::Red;
        State_scan = 1;
        break;
      case 1:
        leds[1] = CRGB::Red;
        leds[32] = CRGB::Red;
        leds[35] = CRGB::Red;
        leds[66] = CRGB::Red;
        leds[69] = CRGB::Red;
        leds[0] = CRGB::Black;
        leds[33] = CRGB::Black;
        leds[34] = CRGB::Black;
        leds[67] = CRGB::Black;
        leds[68] = CRGB::Black;
        State_scan = 2;
        break;
      case 2:
        leds[2] = CRGB::Red;
        leds[31] = CRGB::Red;
        leds[36] = CRGB::Red;
        leds[65] = CRGB::Red;
        leds[70] = CRGB::Red;
        leds[1] = CRGB::Black;
        leds[32] = CRGB::Black;
        leds[35] = CRGB::Black;
        leds[66] = CRGB::Black;
        leds[69] = CRGB::Black;
        State_scan = 3;
        break;
      case 3:
        leds[3] = CRGB::Red;
        leds[30] = CRGB::Red;
        leds[37] = CRGB::Red;
        leds[64] = CRGB::Red;
        leds[71] = CRGB::Red;
        leds[2] = CRGB::Black;
        leds[31] = CRGB::Black;
        leds[36] = CRGB::Black;
        leds[65] = CRGB::Black;
        leds[70] = CRGB::Black;
        State_scan = 4;
        break;
      case 4:
        leds[4] = CRGB::Red;
        leds[29] = CRGB::Red;
        leds[38] = CRGB::Red;
        leds[63] = CRGB::Red;
        leds[72] = CRGB::Red;
        leds[3] = CRGB::Black;
        leds[30] = CRGB::Black;
        leds[37] = CRGB::Black;
        leds[64] = CRGB::Black;
        leds[71] = CRGB::Black;
        State_scan = 5;
        break;
      case 5:
        leds[5] = CRGB::Red;
        leds[28] = CRGB::Red;
        leds[39] = CRGB::Red;
        leds[62] = CRGB::Red;
        leds[73] = CRGB::Red;
        leds[4] = CRGB::Black;
        leds[29] = CRGB::Black;
        leds[38] = CRGB::Black;
        leds[63] = CRGB::Black;
        leds[72] = CRGB::Black;
        State_scan = 6;
        break;
      case 6:
        leds[6] = CRGB::Red;
        leds[27] = CRGB::Red;
        leds[40] = CRGB::Red;
        leds[61] = CRGB::Red;
        leds[74] = CRGB::Red;
        leds[5] = CRGB::Black;
        leds[28] = CRGB::Black;
        leds[39] = CRGB::Black;
        leds[62] = CRGB::Black;
        leds[73] = CRGB::Black;
        State_scan = 7;
        break;
      case 7:
        leds[7] = CRGB::Red;
        leds[26] = CRGB::Red;
        leds[41] = CRGB::Red;
        leds[60] = CRGB::Red;
        leds[75] = CRGB::Red;
        leds[6] = CRGB::Black;
        leds[27] = CRGB::Black;
        leds[40] = CRGB::Black;
        leds[61] = CRGB::Black;
        leds[74] = CRGB::Black;
        State_scan = 8;
        break;
      case 8:
        leds[8] = CRGB::Red;
        leds[25] = CRGB::Red;
        leds[42] = CRGB::Red;
        leds[59] = CRGB::Red;
        leds[76] = CRGB::Red;
        leds[7] = CRGB::Black;
        leds[26] = CRGB::Black;
        leds[41] = CRGB::Black;
        leds[60] = CRGB::Black;
        leds[75] = CRGB::Black;
        State_scan = 9;
        break;
      case 9:
        leds[9] = CRGB::Red;
        leds[24] = CRGB::Red;
        leds[43] = CRGB::Red;
        leds[58] = CRGB::Red;
        leds[77] = CRGB::Red;
        leds[8] = CRGB::Black;
        leds[25] = CRGB::Black;
        leds[42] = CRGB::Black;
        leds[59] = CRGB::Black;
        leds[76] = CRGB::Black;
        State_scan = 10;
        break;
      case 10:
        leds[10] = CRGB::Red;
        leds[23] = CRGB::Red;
        leds[44] = CRGB::Red;
        leds[57] = CRGB::Red;
        leds[78] = CRGB::Red;
        leds[9] = CRGB::Black;
        leds[24] = CRGB::Black;
        leds[43] = CRGB::Black;
        leds[58] = CRGB::Black;
        leds[77] = CRGB::Black;
        State_scan = 11;
        break;
      case 11:
        leds[11] = CRGB::Red;
        leds[22] = CRGB::Red;
        leds[45] = CRGB::Red;
        leds[56] = CRGB::Red;
        leds[79] = CRGB::Red;
        leds[10] = CRGB::Black;
        leds[23] = CRGB::Black;
        leds[44] = CRGB::Black;
        leds[57] = CRGB::Black;
        leds[78] = CRGB::Black;
        State_scan = 12;
        break;
      case 12:
        leds[12] = CRGB::Red;
        leds[21] = CRGB::Red;
        leds[46] = CRGB::Red;
        leds[55] = CRGB::Red;
        leds[80] = CRGB::Red;
        leds[11] = CRGB::Black;
        leds[22] = CRGB::Black;
        leds[45] = CRGB::Black;
        leds[56] = CRGB::Black;
        leds[79] = CRGB::Black;
        State_scan = 13;
        break;
      case 13:
        leds[13] = CRGB::Red;
        leds[20] = CRGB::Red;
        leds[47] = CRGB::Red;
        leds[54] = CRGB::Red;
        leds[81] = CRGB::Red;
        leds[12] = CRGB::Black;
        leds[21] = CRGB::Black;
        leds[46] = CRGB::Black;
        leds[55] = CRGB::Black;
        leds[80] = CRGB::Black;
        State_scan = 14;
        break;
      case 14:
        leds[14] = CRGB::Red;
        leds[19] = CRGB::Red;
        leds[48] = CRGB::Red;
        leds[53] = CRGB::Red;
        leds[82] = CRGB::Red;
        leds[13] = CRGB::Black;
        leds[20] = CRGB::Black;
        leds[47] = CRGB::Black;
        leds[54] = CRGB::Black;
        leds[81] = CRGB::Black;
        State_scan = 15;
        break;
      case 15:
        leds[15] = CRGB::Red;
        leds[18] = CRGB::Red;
        leds[49] = CRGB::Red;
        leds[52] = CRGB::Red;
        leds[83] = CRGB::Red;
        leds[14] = CRGB::Black;
        leds[19] = CRGB::Black;
        leds[48] = CRGB::Black;
        leds[53] = CRGB::Black;
        leds[82] = CRGB::Black;
        State_scan = 16;
        break;
      case 16:
        leds[16] = CRGB::Red;
        leds[17] = CRGB::Red;
        leds[50] = CRGB::Red;
        leds[51] = CRGB::Red;
        leds[84] = CRGB::Red;
        leds[15] = CRGB::Black;
        leds[18] = CRGB::Black;
        leds[49] = CRGB::Black;
        leds[52] = CRGB::Black;
        leds[83] = CRGB::Black;
        State_scan = 17;
        break;
      case 17:
        leds[16] = CRGB::Black;
        leds[17] = CRGB::Black;
        leds[50] = CRGB::Black;
        leds[51] = CRGB::Black;
        leds[84] = CRGB::Black;
        State_scan = 18;
        break;
      case 18:
        fill_solid(leds, NUM_LEDS, CRGB::Black);
        previousMillis_scan = 0;
        State_scan = 0;
        break;
    }
    FastLED.show();
    previousMillis_scan = currentMillis_scan;
  }
}

//====== Fonction pour lire les touches de la télécommandes ======
void read_IR_remote() {
  Serial.println("test");
  if (recepteurIR.decode(&messageRecu)) {
    if (messageRecu.value == 0xFFA25D) {
      Serial.println("Touche 1 appuyée");
      State_remplir = 0;
      noEffectFunc();
      effectState = remplir;
    }
    else if (messageRecu.value == 0xFF629D) {
      Serial.println("Touche 2 appuyée");
      State_scan = 0;
      noEffectFunc();
      effectState = scan;
    }
    recepteurIR.resume();
  }
}
//================================================================


avec des NEOPIXEL malheureusement vous avez une dépendance au timing d'affichage qui fait qu'on bloque assez longuement les interruptions et la bibliothèque IRremote a besoin d'une interruption super fréquente (toutes les 50 µs) pour fonctionner... donc quand vous faites l'animation, vous ne pouvez quasiment pas lire une commande IR

c'est documenté ➜ GitHub - Arduino-IRremote/Arduino-IRremote: Infrared remote library for Arduino: send and receive infrared signals with multiple protocols

Problems with Neopixels, FastLed etc.

IRremote will not work right when you use Neopixels (aka WS2811/WS2812/WS2812B) or other libraries blocking interrupts for a longer time (> 50 µs).
Whether you use the Adafruit Neopixel lib, or FastLED, interrupts get disabled on many lower end CPUs like the basic Arduinos for longer than 50 µs. In turn, this stops the IR interrupt handler from running when it needs to. See also this video.

One workaround is to wait for the IR receiver to be idle before you send the Neopixel data with if (IrReceiver.isIdle()) { strip.show();}.
This prevents at least breaking a running IR transmission and -depending of the update rate of the Neopixel- may work quite well.
There are some other solutions to this on more powerful processors, see this page from Marc MERLIN

(avec des APA101 il n'y a pas cette contrainte de timing et donc on n'a pas le souci mais ils sont plus chers que les Neopixels)

Dans la mesure où la télécommande est utilisée pour modifier le pattern affiché, elle ne doit pas émettre très souvent et lorsqu'elle émet c'est justement pour modifier le pattern donc la solution proposée devrait faire l'affaire. En tout cas elle n'est pas difficile à mettre en œuvre et vaut le coût d'être essayée..

C’est possible si l’animation n’est pas continue

Et est-ce que ce possible de le faire avec un bouton poussoir (ou plusieurs) ?

Oui sans doute comme expliqué dans le lien cité par @J-M-L dans le #2.
Il suffit d'essayer.

Oupss je ne sais pas pourquoi j'étais resté polarisé sur la télécommande IR.

1 Like

un bouton poussoir n'a pas les contraintes temporelles du décodage infra-rouge qui nécessite d'écouter le signal toutes les 50 micro-secondes

un appui typique sur un bouton par un humain dure plusieurs centaines de millisecondes généralement donc l'appel à la fonction strip.show(); ne dure pas tout ce temps là et vous avez le temps de revenir à la boucle principal pour tester si le bouton a été appuyé.

Et pour simplifier votre gestion des boutons, éventuellement utilisez la bibliothèque Button dans easyRun de @bricoleau ou OneButton de Matthias Hertel ou encore Toggle de @dlloyd.

1 Like

Ok, merci, j'essayerais :grin:

vous avez 99% du code

par exemple avec la bibliothèque OneButton

details du code
#include <FastLED.h>
#include <OneButton.h>

//====== FastLED ========
#define NUM_LEDS 85
#define DATA_PIN 3
CRGB leds[NUM_LEDS];
//=======================

const byte pinEffet1 = 4;
const byte pinEffet2 = 5;
OneButton b1(pinEffet1), b2(pinEffet2);

//================================

// les animations
void noEffectFunc();
void remplirFunc();
void scanFunc();

void (*ptrToAnimation)() = noEffectFunc;


void choixEffet1() {
  ptrToAnimation = remplirFunc;
}
void choixEffet2() {
  ptrToAnimation = scanFunc;
}

void setup() {
  b1.attachClick(choixEffet1);
  b2.attachClick(choixEffet2);
  FastLED.addLeds<NEOPIXEL, DATA_PIN>(leds, NUM_LEDS);
  FastLED.clear(); // éteint toutes les leds

  Serial.begin(115200);
}

void loop() {
  b1.tick();
  b2.tick();
  ptrToAnimation();
}



void noEffectFunc() {
  for (int i; i < NUM_LEDS; i++) {
    leds[i] = CRGB::Black;
  }
  FastLED.show();
}

void remplirFunc() {
  static unsigned long previousMillis_remplir = 0;
  static const long interval_remplir = 200;
  static int State_remplir = 0;

  unsigned long currentMillis_remplir = millis();
  if ((currentMillis_remplir - previousMillis_remplir) >= interval_remplir) {
    switch (State_remplir) {
      case 0:
        FastLED.clear();
        leds[0] = CRGB::Red;
        leds[33] = CRGB::Red;
        leds[34] = CRGB::Red;
        leds[67] = CRGB::Red;
        leds[68] = CRGB::Red;
        State_remplir = 1;
        break;
      case 1:
        leds[1] = CRGB::Red;
        leds[32] = CRGB::Red;
        leds[35] = CRGB::Red;
        leds[66] = CRGB::Red;
        leds[69] = CRGB::Red;
        State_remplir = 2;
        break;
      case 2:
        leds[2] = CRGB::Red;
        leds[31] = CRGB::Red;
        leds[36] = CRGB::Red;
        leds[65] = CRGB::Red;
        leds[70] = CRGB::Red;
        State_remplir = 3;
        break;
      case 3:
        leds[3] = CRGB::Red;
        leds[30] = CRGB::Red;
        leds[37] = CRGB::Red;
        leds[64] = CRGB::Red;
        leds[71] = CRGB::Red;
        State_remplir = 4;
        break;
      case 4:
        leds[4] = CRGB::Red;
        leds[29] = CRGB::Red;
        leds[38] = CRGB::Red;
        leds[63] = CRGB::Red;
        leds[72] = CRGB::Red;
        State_remplir = 5;
        break;
      case 5:
        leds[5] = CRGB::Red;
        leds[28] = CRGB::Red;
        leds[39] = CRGB::Red;
        leds[62] = CRGB::Red;
        leds[73] = CRGB::Red;
        State_remplir = 6;
        break;
      case 6:
        leds[6] = CRGB::Red;
        leds[27] = CRGB::Red;
        leds[40] = CRGB::Red;
        leds[61] = CRGB::Red;
        leds[74] = CRGB::Red;
        State_remplir = 7;
        break;
      case 7:
        leds[7] = CRGB::Red;
        leds[26] = CRGB::Red;
        leds[41] = CRGB::Red;
        leds[60] = CRGB::Red;
        leds[75] = CRGB::Red;
        State_remplir = 8;
        break;
      case 8:
        leds[8] = CRGB::Red;
        leds[25] = CRGB::Red;
        leds[42] = CRGB::Red;
        leds[59] = CRGB::Red;
        leds[76] = CRGB::Red;
        State_remplir = 9;
        break;
      case 9:
        leds[9] = CRGB::Red;
        leds[24] = CRGB::Red;
        leds[43] = CRGB::Red;
        leds[58] = CRGB::Red;
        leds[77] = CRGB::Red;
        State_remplir = 10;
        break;
      case 10:
        leds[10] = CRGB::Red;
        leds[23] = CRGB::Red;
        leds[44] = CRGB::Red;
        leds[57] = CRGB::Red;
        leds[78] = CRGB::Red;
        State_remplir = 11;
        break;
      case 11:
        leds[11] = CRGB::Red;
        leds[22] = CRGB::Red;
        leds[45] = CRGB::Red;
        leds[56] = CRGB::Red;
        leds[79] = CRGB::Red;
        State_remplir = 12;
        break;
      case 12:
        leds[12] = CRGB::Red;
        leds[21] = CRGB::Red;
        leds[46] = CRGB::Red;
        leds[55] = CRGB::Red;
        leds[80] = CRGB::Red;
        State_remplir = 13;
        break;
      case 13:
        leds[13] = CRGB::Red;
        leds[20] = CRGB::Red;
        leds[47] = CRGB::Red;
        leds[54] = CRGB::Red;
        leds[81] = CRGB::Red;
        State_remplir = 14;
        break;
      case 14:
        leds[14] = CRGB::Red;
        leds[19] = CRGB::Red;
        leds[48] = CRGB::Red;
        leds[53] = CRGB::Red;
        leds[82] = CRGB::Red;
        State_remplir = 15;
        break;
      case 15:
        leds[15] = CRGB::Red;
        leds[18] = CRGB::Red;
        leds[49] = CRGB::Red;
        leds[52] = CRGB::Red;
        leds[83] = CRGB::Red;
        State_remplir = 16;
        break;
      case 16:
        leds[16] = CRGB::Red;
        leds[17] = CRGB::Red;
        leds[50] = CRGB::Red;
        leds[51] = CRGB::Red;
        leds[84] = CRGB::Red;
        State_remplir = 17;
        break;
      case 17:
        fill_solid(leds, NUM_LEDS, CRGB::Black);
        previousMillis_remplir = 0;
        State_remplir = 0;
        break;
    }
    FastLED.show();
    previousMillis_remplir = currentMillis_remplir;
  }
}

void scanFunc() {
  static unsigned long previousMillis_scan = 0;
  static const long interval_scan = 200;
  static int State_scan = 0;

  unsigned long currentMillis_scan = millis();
  if ((currentMillis_scan - previousMillis_scan) >= interval_scan) {
    switch (State_scan) {
      case 0:
        FastLED.clear();
        leds[0] = CRGB::Red;
        leds[33] = CRGB::Red;
        leds[34] = CRGB::Red;
        leds[67] = CRGB::Red;
        leds[68] = CRGB::Red;
        State_scan = 1;
        break;
      case 1:
        leds[1] = CRGB::Red;
        leds[32] = CRGB::Red;
        leds[35] = CRGB::Red;
        leds[66] = CRGB::Red;
        leds[69] = CRGB::Red;
        leds[0] = CRGB::Black;
        leds[33] = CRGB::Black;
        leds[34] = CRGB::Black;
        leds[67] = CRGB::Black;
        leds[68] = CRGB::Black;
        State_scan = 2;
        break;
      case 2:
        leds[2] = CRGB::Red;
        leds[31] = CRGB::Red;
        leds[36] = CRGB::Red;
        leds[65] = CRGB::Red;
        leds[70] = CRGB::Red;
        leds[1] = CRGB::Black;
        leds[32] = CRGB::Black;
        leds[35] = CRGB::Black;
        leds[66] = CRGB::Black;
        leds[69] = CRGB::Black;
        State_scan = 3;
        break;
      case 3:
        leds[3] = CRGB::Red;
        leds[30] = CRGB::Red;
        leds[37] = CRGB::Red;
        leds[64] = CRGB::Red;
        leds[71] = CRGB::Red;
        leds[2] = CRGB::Black;
        leds[31] = CRGB::Black;
        leds[36] = CRGB::Black;
        leds[65] = CRGB::Black;
        leds[70] = CRGB::Black;
        State_scan = 4;
        break;
      case 4:
        leds[4] = CRGB::Red;
        leds[29] = CRGB::Red;
        leds[38] = CRGB::Red;
        leds[63] = CRGB::Red;
        leds[72] = CRGB::Red;
        leds[3] = CRGB::Black;
        leds[30] = CRGB::Black;
        leds[37] = CRGB::Black;
        leds[64] = CRGB::Black;
        leds[71] = CRGB::Black;
        State_scan = 5;
        break;
      case 5:
        leds[5] = CRGB::Red;
        leds[28] = CRGB::Red;
        leds[39] = CRGB::Red;
        leds[62] = CRGB::Red;
        leds[73] = CRGB::Red;
        leds[4] = CRGB::Black;
        leds[29] = CRGB::Black;
        leds[38] = CRGB::Black;
        leds[63] = CRGB::Black;
        leds[72] = CRGB::Black;
        State_scan = 6;
        break;
      case 6:
        leds[6] = CRGB::Red;
        leds[27] = CRGB::Red;
        leds[40] = CRGB::Red;
        leds[61] = CRGB::Red;
        leds[74] = CRGB::Red;
        leds[5] = CRGB::Black;
        leds[28] = CRGB::Black;
        leds[39] = CRGB::Black;
        leds[62] = CRGB::Black;
        leds[73] = CRGB::Black;
        State_scan = 7;
        break;
      case 7:
        leds[7] = CRGB::Red;
        leds[26] = CRGB::Red;
        leds[41] = CRGB::Red;
        leds[60] = CRGB::Red;
        leds[75] = CRGB::Red;
        leds[6] = CRGB::Black;
        leds[27] = CRGB::Black;
        leds[40] = CRGB::Black;
        leds[61] = CRGB::Black;
        leds[74] = CRGB::Black;
        State_scan = 8;
        break;
      case 8:
        leds[8] = CRGB::Red;
        leds[25] = CRGB::Red;
        leds[42] = CRGB::Red;
        leds[59] = CRGB::Red;
        leds[76] = CRGB::Red;
        leds[7] = CRGB::Black;
        leds[26] = CRGB::Black;
        leds[41] = CRGB::Black;
        leds[60] = CRGB::Black;
        leds[75] = CRGB::Black;
        State_scan = 9;
        break;
      case 9:
        leds[9] = CRGB::Red;
        leds[24] = CRGB::Red;
        leds[43] = CRGB::Red;
        leds[58] = CRGB::Red;
        leds[77] = CRGB::Red;
        leds[8] = CRGB::Black;
        leds[25] = CRGB::Black;
        leds[42] = CRGB::Black;
        leds[59] = CRGB::Black;
        leds[76] = CRGB::Black;
        State_scan = 10;
        break;
      case 10:
        leds[10] = CRGB::Red;
        leds[23] = CRGB::Red;
        leds[44] = CRGB::Red;
        leds[57] = CRGB::Red;
        leds[78] = CRGB::Red;
        leds[9] = CRGB::Black;
        leds[24] = CRGB::Black;
        leds[43] = CRGB::Black;
        leds[58] = CRGB::Black;
        leds[77] = CRGB::Black;
        State_scan = 11;
        break;
      case 11:
        leds[11] = CRGB::Red;
        leds[22] = CRGB::Red;
        leds[45] = CRGB::Red;
        leds[56] = CRGB::Red;
        leds[79] = CRGB::Red;
        leds[10] = CRGB::Black;
        leds[23] = CRGB::Black;
        leds[44] = CRGB::Black;
        leds[57] = CRGB::Black;
        leds[78] = CRGB::Black;
        State_scan = 12;
        break;
      case 12:
        leds[12] = CRGB::Red;
        leds[21] = CRGB::Red;
        leds[46] = CRGB::Red;
        leds[55] = CRGB::Red;
        leds[80] = CRGB::Red;
        leds[11] = CRGB::Black;
        leds[22] = CRGB::Black;
        leds[45] = CRGB::Black;
        leds[56] = CRGB::Black;
        leds[79] = CRGB::Black;
        State_scan = 13;
        break;
      case 13:
        leds[13] = CRGB::Red;
        leds[20] = CRGB::Red;
        leds[47] = CRGB::Red;
        leds[54] = CRGB::Red;
        leds[81] = CRGB::Red;
        leds[12] = CRGB::Black;
        leds[21] = CRGB::Black;
        leds[46] = CRGB::Black;
        leds[55] = CRGB::Black;
        leds[80] = CRGB::Black;
        State_scan = 14;
        break;
      case 14:
        leds[14] = CRGB::Red;
        leds[19] = CRGB::Red;
        leds[48] = CRGB::Red;
        leds[53] = CRGB::Red;
        leds[82] = CRGB::Red;
        leds[13] = CRGB::Black;
        leds[20] = CRGB::Black;
        leds[47] = CRGB::Black;
        leds[54] = CRGB::Black;
        leds[81] = CRGB::Black;
        State_scan = 15;
        break;
      case 15:
        leds[15] = CRGB::Red;
        leds[18] = CRGB::Red;
        leds[49] = CRGB::Red;
        leds[52] = CRGB::Red;
        leds[83] = CRGB::Red;
        leds[14] = CRGB::Black;
        leds[19] = CRGB::Black;
        leds[48] = CRGB::Black;
        leds[53] = CRGB::Black;
        leds[82] = CRGB::Black;
        State_scan = 16;
        break;
      case 16:
        leds[16] = CRGB::Red;
        leds[17] = CRGB::Red;
        leds[50] = CRGB::Red;
        leds[51] = CRGB::Red;
        leds[84] = CRGB::Red;
        leds[15] = CRGB::Black;
        leds[18] = CRGB::Black;
        leds[49] = CRGB::Black;
        leds[52] = CRGB::Black;
        leds[83] = CRGB::Black;
        State_scan = 17;
        break;
      case 17:
        leds[16] = CRGB::Black;
        leds[17] = CRGB::Black;
        leds[50] = CRGB::Black;
        leds[51] = CRGB::Black;
        leds[84] = CRGB::Black;
        State_scan = 18;
        break;
      case 18:
        fill_solid(leds, NUM_LEDS, CRGB::Black);
        previousMillis_scan = 0;
        State_scan = 0;
        break;
    }
    FastLED.show();
    previousMillis_scan = currentMillis_scan;
  }
}
1 Like

Je viens d'essayer avec votre code, et tout fonctionne :grin:, j'ai juste modifier quelques petites choses pour que ça rendent comme je le veuille, mais sinon c'est parfait. Merci @J-M-L et merci @fdufnews

très bien - amusez vous bien (et il faut comprendre le code bien sûr et vous pouvez lire aussi le Tuto bibliothèque OneButton de Rémi / @Pandaroux007)

1 Like

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.