Clignoter un bandeau led rgb et utilisation onebutton

Bonjour, je souhaite faire clignoter un ruban de led rgb WS2812 mais je trouve pas la commande correct pour le faire, j'ai essayé plusieurs fonctions mais j'ai systématiquement une erreur.
de plus, j'aimerais après ça, appeler une autre couleur pour faire exactement la même boucle mais avec une couleur différente en appuyant sur un bouton, et ainsi de suite pour plusieurs couleurs mais toujours avec le même bouton mais la j'avoue que j'ai trouver que pour deux fonctions pour un bouton, donc est ce que c'est possible?
Merci


```cpp
// Adafruit NeoPixel library

#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>  // Required for 16 MHz Adafruit Trinket
#endif
#define PIN 6           // ruban de led connecter au pin 6
#define NUMPIXELS 60    // 60 led par metre
#define BRIGHTNESS 255  // luminosité de 0 a 255 max \
                        // definition de la luminosité de 0 a 255
// ruban de led a declarer
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

void setup() {
  pixels.begin();  // initialisation du ruban de led (obligatoire)
  pixels.show();
}

void loop() {

  // i représente la première led et commence par zero, i++ allumera les leds suivantes
  for (int i = 0; i < NUMPIXELS; i++) {  // pour chaque led

    // couleur de chaque led de (0, 0, 0) a (255, 255, 255)
    pixels.setPixelColor(i, pixels.Color(0, 255, 255));
    pixels.show();  // pour que les leds s'allument
    delay(15);      // delai d'allumage apres chaque allumage du pixel precedent
  }
}

Votre croquis fonctionne parfaitement sans le '''cpp en haut. Il éclaire chaque pixel en cyan. Pour « flasher » les néopixels, vous devez tous les allumer et les « afficher », puis les éteindre tous et les « afficher() ». Faites un pas à la fois.

Files for WOKWI.COM:

sketch.ino
// Adafruit NeoPixel library

#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>  // Required for 16 MHz Adafruit Trinket
#endif
#define PIN 6           // ruban de led connecter au pin 6
#define NUMPIXELS 60    // 60 led par metre
#define BRIGHTNESS 255  // luminosité de 0 a 255 max \
                        // definition de la luminosité de 0 a 255
// ruban de led a declarer
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

void setup() {
  pixels.begin();  // initialisation du ruban de led (obligatoire)
  pixels.show();
}

void loop() {
  // i représente la première led et commence par zero, i++ allumera les leds suivantes
  for (int i = 0; i < NUMPIXELS; i++) {  // pour chaque led

    // couleur de chaque led de (0, 0, 0) a (255, 255, 255)
    pixels.setPixelColor(i, pixels.Color(0, 255, 255));
    pixels.show();  // pour que les leds s'allument
    delay(15);      // delai d'allumage apres chaque allumage du pixel precedent
  }
}
diagram.json
{
  "version": 1,
  "author": "Anonymous maker",
  "editor": "wokwi",
  "parts": [
    { "type": "wokwi-arduino-nano", "id": "nano", "top": 0, "left": 0, "attrs": {} },
    {
      "type": "wokwi-neopixel-matrix",
      "id": "ring1",
      "top": -155.28,
      "left": -53.87,
      "attrs": { "pixleate": "1", "rows": "6", "cols": "10" }
    }
  ],
  "connections": [
    [ "nano:6", "ring1:DIN", "green", [ "v0" ] ],
    [ "ring1:GND", "nano:GND.1", "black", [ "v48", "h76.8" ] ],
    [ "ring1:VCC", "nano:5V", "red", [ "v57.6", "h48" ] ]
  ],
  "dependencies": {}
}

Je sais qu’il fonctionne vu que j’ai essayé mais je ne sais pas quel ligne je dois écrire pour allumer et ensuite éteindre les leds, j’ai eu beau essayer quelques fonctions que j’ai trouvé mais suite à ça j’ai tout le temps des erreurs et des choses que je dois déclarer, et plus j’en fais et plus j’ai d’erreurs, donc commen puis-je simplement faire cette fonction à partir de ce code?

setPixelColor fixe la couleur, d'une LED en particulier.
show rend actif les changement demandé par les différents setPixelColor que tu as effectué depuis le dernier show.

Tu peux jouer avec pixels.setBrightness() de 0 à 255 pour éteindre et allumer toutes LED en même temps.

Cordialement
jpbbricole

J’ai déjà essayé mais il me met un message d’erreur comme quoi j’ai pas déclarer une ligne, j’ai repris le message d’erreur mais j’ai encore une erreur et je ne sais pas où ni comment je dois m’en sortir, comme je débute et que j’essaye d’apprendre par moi même, mais là j’avoue que je patauge :sweat_smile:

mets le message d'erreur et le code que tu as écrit.

Pour cela, il faut comprendre ce que le message dit.
tu peux par exemple le chercher dans ton moteur de recherche préférer.
Ou simplement nous copier/coller le texte de l'erreur, pour que l'on t'indique ce qui ne va pas.

Si vous voulez que le panneau clignote, déplacez d'abord le pixels.show() ; en dehors de la boucle « for ».

Ensuite, supprimez le delay(15) ; pour accélérer la coloration.

Ajoutez ensuite un style « blink with delay() »... comme ça...

delay(500);
pixels.clear();
pixels.show();
delay(500);

Avec les ajustements...

// Adafruit NeoPixel library
#include <Adafruit_NeoPixel.h>
// #ifdef __AVR__
// #include <avr/power.h>  // Required for 16 MHz Adafruit Trinket
// #endif
#define PIN 6           // ruban de led connecter au pin 6
#define NUMPIXELS 60    // 60 led par metre
#define BRIGHTNESS 255  // luminosité de 0 a 255 max \
  // definition de la luminosité de 0 a 255
// ruban de led a declarer
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

void setup() {
  pixels.begin();  // initialisation du ruban de led (obligatoire)
  pixels.show();
}

void loop() {
  // i représente la première led et commence par zero, i++ allumera les leds suivantes
  for (int i = 0; i < NUMPIXELS; i++) {  // pour chaque led
    // couleur de chaque led de (0, 0, 0) a (255, 255, 255)
    pixels.setPixelColor(i, pixels.Color(0, 255, 255));
    // delay(15);      // delai d'allumage apres chaque allumage du pixel precedent
  }
  pixels.show();  // pour que les leds s'allument
  delay(500);
  pixels.clear();
  pixels.show();
  delay(500);
}

blink

je viens de rajouté la ligne mais avec pixels.show() après et ca marche mais je suppose qu'il faut mettre un delay après pour que ca clignote :thinking:

alors certes ca marche mais mais ca me refait partir mon ruban du début hors j'aimerai que chaque led s'allume l'une après l'autre et une fois toutes allumées, qu'elles clignotent.
En revanche je comprend que chaque fois que je demande a mon programme de faire quelque chose, étape après étape dans le loop, il faut que mette chaque étape entre crochet {} ou je me trompe?

Bonjour mandalorien31

Voilà un exemple avec pixels.fill();
Pour faciliter l'extension de ton programme, je l'ai fait en 2 fonctions, une pour allumer les pixels:
void ledAllumage(int colRouge, int colVert, int colBleu, int tempo)
et l'autre pour faire clignoter le ruban:
void ledClignotement(int colRouge, int colVert, int colBleu, int clign, int tempo)

Pour appeler ces fonctions:
ledAllumage(0, 255, 255, 15);
ledClignotement(0, 255, 255, 6, 250);

Ainsi par pression sur un bouton, tu pourra, en ajoutant cette paire de lignes en changeant de couleurs, passer d'un show à l'autre.

Le programme:

#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>  // Required for 16 MHz Adafruit Trinket
#endif
#define PIN 6           // ruban de led connecter au pin 6
#define NUMPIXELS 60    // 60 led par metre
#define BRIGHTNESS 70  // luminosité de 0 a 255 max \
// definition de la luminosité de 0 a 255
// ruban de led a declarer
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

const int pixelFlashNumber = 6;     // Nombre de clignotements
const int pixelFlashTempo = 1250;     // Tempo de clignotement
void setup() {
	Serial.begin(115200);
	pixels.begin();  // initialisation du ruban de led (obligatoire)
	pixels.setBrightness(BRIGHTNESS);
	pixels.show();

	ledAllumage(0, 255, 255, 15);
	ledClignotement(0, 255, 255, 6, 250);

	delay(2000);
	ledAllumage(255, 0, 0, 45);
	ledClignotement(255, 0, 0, 8, 250);
}

void loop() {
}

void ledAllumage(int colRouge, int colVert, int colBleu, int tempo)
{
	for (int i = 0; i < NUMPIXELS; i++) {  // pour chaque led

		// couleur de chaque led de (0, 0, 0) a (255, 255, 255)
		pixels.setPixelColor(i, pixels.Color(colRouge, colVert, colBleu));
		pixels.show();  // pour que les leds s'allument
		delay(tempo);      // delai d'allumage apres chaque allumage du pixel precedent
	}
}

void ledClignotement(int colRouge, int colVert, int colBleu, int clign, int tempo)
{
	for (int c = 0; c < clign; c ++)
	{
		pixels.fill(0, 0, 0);     // Etindre
		pixels.show();
		delay(tempo);
		pixels.fill(pixels.Color(colRouge, colVert, colBleu));     // Allumer
		pixels.show();
		delay(tempo);
	}
}

N'hésites pas à poser des questions :wink:

A+
Cordialement
jpbbricole

je vois pas ou le bouton est déclaré ni sur quel pin le brancher du coup j'ai essayé d'en brancher un mais même en le déclarant, c'est pas tout a fait l'effet que je voudrais, je vais essayé d'être plus clair dans ma démarche
j'allume mon projet
les leds s'allument l'une après l'autre rapidement
elles clignotent très rapidement façon flash
j'appuie sur un bouton
les leds s'allument l'une après l'autre rapidement mais d'une autre couleur
elles clignotent très rapidement
j'appuie sur le même bouton
même effet mais encore une couleur différente et ainsi de suite
tout ça pour environ 5 ou 6 couleurs et une fois la dernière couleur atteinte, elle repart sur la première

Bonjour mandalorien31

Mets en ligne ce que tu as essayé comme code (entre les balises).

A+
Cordialement
jpbbricole

justement le code que j'ai essayé je l'ai déjà mis mais c'était au clignotement que ça pêche un peu et arrivé au bouton que je trouve pas de tutos ou d'exemples pour effectuer cette commande
et le code que vous m'avez gentiment fait fonctionne mais il s'allume, clignote 6 fois (normal c'est le code :joy:) et ensuite il passe au rouge et refais la même soupe et s'arrête de clignoter et reste au rouge, hors je veux pas qu'il s'arrête de clignoter mais quand j'appuie sur un bouton, il éxécute le même cycle mais avec une couleur différente, un peu comme le choix d'une couleur d'un sabre laser

Bonjour mandalorien31

Oui, mais où est la déclaration du bouton?

Dans le titre il est fait mention de OneButton, prends une bibliothèque basique comme Button et fait l'exemple, essaies de faire incrémenter une variable à chaque pression du bouton.

A+
Cordialement
jpbbricole

Non, puisque tu as indiqué ce qui suit:

Visiblement tu as essayé de le déclaré, c'est ce code là que @jpbbricole voudrait que tu donne.
Pour que l'on puisse t'indiquer ce qui ne va pas.

Pour l'instant laisse tomber ton programme, cherche plutôt à individualiser chaque point.
Par exemple: faire une action sur l'appuis d'un bouton, faire clignoter une LED, faire changer de couleur une LED, faire allumer une à une une série de LED.

Si on prend le bouton, tu dois le brancher correctement sur ta platine d'essai.
Il y a plusieurs façon de faire, en règle général on préconise, d'initialiser la broche utilisé en PULLUP et de brancher le bouton entre la broche choisi et la masse (GND).
Ensuite dans ton code il faudra utiliser par exemple une librairie comme OneButton ou Button. La plus part des librairies donnes des exemples, donc je te laisse t'y reporter pour savoir quoi écrire dans ton programme.

Quand on débute la première chose à faire à mon avis est de lire le site de eskimon

Ba justement tu as un code de base qui fait certaines choses proche de ce que tu veux, a toi de jouer avec pour voir que font chaque instruction.
Par exemple le faire clignoter 10 fois ou passer du vert au bleu, ...

Dans tout ce que tu as dis, j'ai essayé par moi même de faire pas mal de chose en cherchant d'abord, et ma logique est que je dois d'abord faire allumé mes leds, ensuite toutes les faire clignoter en même temps, et ensuite faire un programme avec un bouton, hors je sèche pour les faire clignoter toutes en même temps, mais merci pour le site, je vais essayé ca en parallèle pour le bouton.
mais je n'arrive quand même pas faire clignoter mes leds dans mon programme de base :joy:

Pour les faires tous clignoter en même temps, le mieux je pense est de suivre ce qu'a indiqué @jpbbricole en post #12
tu position toutes les LED à la couleur choisi
pixels.fill(pixels.Color(0, 255, 255), NUMPIXELS)

puis tu fais la même chose après un certain laps de temps avec la couleur noir
pixels.fill(pixels.Color(0, 0, 0), NUMPIXELS)

Mais comme tu refuse de montrer ton programme modifier, on ne peut pas deviner ce que tu fais ou ne fais pas :frowning:

je refuse pas de montrer mon programme, il est tout en haut avec ma demande.
et je ne fais que copier les programmes qu'on me donne mais ça ne correspond pas a ce que j'aimerai faire.
Mon programme de base me conviens puisqu'il allume mes leds comme je veux, mais les faire clignoter, je n'y arrive pas.
Ensuite j'aimerai intégrer juste un seul bouton qui fera office de commande pour faire passer a la fonction suivante mais avec juste la couleur différente et ainsi de suite.
ou alors je me suis mal fais comprendre :sweat_smile: