Fastled, initiation

Bonjour,

J'aurais eu besoin de quelques explications et d'une petite correction, j'ai l'impression d'être dans le faux mais à ma grande surprise j'ai enfin le résultat escompté.

Je suis partie de l'exemple qui allume les leds du bord extérieur vers l'intérieur, j'avais envi de faire le contraire. Du milieu vers les bords extérieurs.

C'est notamment ces 2 lignes que j'ai du mal à saisir. Comment devrais-je "les traduire"?

for(int i = 0; i < NUM_LEDS; i++) {

I égale à 0 mais inférieur à 60; i s'incrémente?

leds(NUM_LEDS/2, 0) = leds(NUM_LEDS/2, NUM_LEDS -1);

Alors là...
j'allume donc les (60/2 jusqu'à 0) qui sont = (60/2 jusqu'a la dernière -1)?
J'ai vraiment du mal à saisir tout ça encore, même si j'avance!

A l'allumage la led[0] reste allumée quelques seconde aussi. L'impression que j'ai eu un coup de chance.
Le code d'origine est précédé de //

//https://github.com/FastLED/FastLED/blob/master/examples/RGBSetDemo/RGBSetDemo.ino
#include <FastLED.h>
#define NUM_LEDS 60
#define DATA_PIN 3
CRGBArray<NUM_LEDS> leds;

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

void loop() {
  static uint8_t hue;
  //for(int i = 0; i < NUM_LEDS/2; i++) { 
    for(int i = 0; i < NUM_LEDS; i++) { 

    // fade everything out
    leds.fadeToBlackBy(10);

    // let's set an led value
    leds[i] = CHSV(160,hue++,200);

    // now, let's first 20 leds to the top 20 leds, 
    //leds(NUM_LEDS/2,NUM_LEDS-1) = leds(NUM_LEDS/2 - 1 ,0);
  leds(NUM_LEDS/2, 0) = leds(NUM_LEDS/2, NUM_LEDS -1);
  
    FastLED.delay(30);
}
}

Évidemment toute aide information, complément est le bienvenue. £
Bien à vous!

ils utilisent un truc un peu avancé du C++ CRGBArray<NUM_LEDS> leds;--> lire ici

mai si vous avez déjà du mal avec une boucle for, c'est sans doute un peu avancé pour vous pour le moment comme concept

Bonjour,

for(int i = 0; i < NUM_LEDS; i++) {corps de la boucle que l'on exécute}

Comme décrit dans les cours d'Eskimon, on créer une boucle:

  1. en utilisant une variable i de type int donc la valeur de départ est fixée à 0.

  2. que l'on exécute tant que le résultat i < NUM_LEDS est vrai (donc tant que i est inférieur à NUM_LEDS).

  3. avec une incrémentation de la variable i après chaque passage dans la boucle.

La notation abrégée i++ peut aussi s'écrire i+=1 et correspond à l'écriture classique i=i+1

leds(NUM_LEDS/2, 0) = leds(NUM_LEDS/2, NUM_LEDS -1);

Il s'agit là d'une fonction propre à la librairie FastLED.

On définit un groupe de leds contiguës en indiquant la première et la dernière led de l'ensemble pour copier (assignation grâce au signe =) l'état du deuxième groupe de leds qui suit.

Vous remarquerez que lors de la définition du groupe de leds, la première led n'est pas forcément l'indice le plus faible.

Lors de l'assignation du groupe, l'itération (comme dans une boucle 'for') pour chaque led sera faite de l'indice de la première led donnée vers l'indice de la dernière led donnée.

On obtient donc l'effet miroir en inversant les indices de leds du première groupe (comme dans l'exemple plus haut), ou ceux du second groupes.

Par contre, votre modification de cette ligne devrait logiquement s'écrire:

leds(NUM_LEDS/2 - 1, 0) = leds(NUM_LEDS/2, NUM_LEDS -1);

si vous voulez copier l'état des leds d'indice 20 à 39 (NUM_LEDS/2 à NUM_LEDS - 1) sur les leds d'indice 19 à 0 (NUM_LEDS/2 à 0).