[Conseil] Gérer les couleurs d'un neopixel ring 16 avec 3 potentiomètres ?

Bonjour,

J'ai un nano r3, un clone neopixel ring 16, 3 potentiomètres de 10 kOhm linéaires. Et surtout, je suis bien bien débutant...hein...

Je cherche à pouvoir gérer les 3 couleurs, à savoir: rouge, vert et bleu, indépendamment les unes des autres, avec un potentiomètre pour chaque.

Il y a bien ce topic ici : Neopixel colour control , mais comme disait mon fils "ça pas marche...".

Je m'explique:

  • j'ai adapté le nombre de led dans le code
  • j'ai apporté la modification de code qui est mentionnée en réponse du sus-dit topic
  • j'ai modifié le numéro de la broche de sortie sur laquelle la borne data de l'anneau est reliée
  • j'ai vérifier les connexions (et oui, j'ai trouvé des choses mal branchées... mais...)
  • j'ai bien compilé et téléversé tout ça dans le nano

Pour finalement n'obtenir que des led qui s'allument en blanc...quelque soit les positions des potentiomètres.
Est-ce que quelqu'un pourrait me conseiller un projet qui ressemble, ou qui soit, à ce que je veux faire?
A défaut, est-ce que vous pourriez m'aiguiller sur comment écrire le code?

Merci d'avance à vous et désolé si ce post fait doublon, mais je n'ai pas su trouver de fil de discussion autre que celui que je mentionne et qui puisse m'aider.

Voici le code "adapté" par mes soins, au cas où:

#include <Adafruit_NeoPixel.h>

#define PIN 3

Adafruit_NeoPixel strip = Adafruit_NeoPixel(21, PIN, NEO_GRB + NEO_KHZ400);


int sensorValue = A0;
int sensorValue2 = A1;
int sensorValue3 = A2;
int currentColourValue;
int currentColourValue2;
int currentColourValue3;


void setup() {
  strip.begin();
  strip.show(); // Initialize all pixels to 'off'
 
 
}

void loop() {
 
 
   
 
 currentColourValue = (255 - map( analogRead(sensorValue), 0, 1024, 0, 255 ) );
 currentColourValue2 = (255 - map( analogRead(sensorValue2), 0, 1024, 0, 255 ) );
 currentColourValue3 = (255 - map( analogRead(sensorValue3), 0, 1024, 0, 255 ) );
 
 colorWipe(strip.Color(currentColourValue, currentColourValue2, currentColourValue3), 50); // Red
 

 }

void colorWipe(uint32_t c, uint8_t wait) {
  for(uint16_t i=0; i<strip.numPixels(); i++) {
      strip.setPixelColor(i, c);
      strip.show();
      delay(10);
  }
}

arrivez vous déjà à allumer votre neopixel ring 16 dans une couleur déterminée?

  • j'ai adapté le nombre de led dans le code

Adafruit_NeoPixel([color=red]21[/color], PIN, NEO_GRB + NEO_KHZ400); le 21 est louche.. et avez vous des "NEO_GRB + NEO_KHZ400" ?

Expliquez nous aussi comment sont branchés les potentiomètres

Bonjour,

Si ce sont des WS2812 c'est NEO_KHZ800 au lieu de NEO_KHZ400 dans la création de strip.

Adafruit_NeoPixel(21, PIN, NEO_GRB + NEO_KHZ400); le 21 est louche.. et avez vous des "NEO_GRB + NEO_KHZ400" ?

Alors:

  • Oui, le 21 est louche. Si je ne passe pas ce paramètre, les dernières LED ne s'allument pas. Par exemple si je met 20, la dernière LED est éteinte. Si je mets 16, il n'y a que la moitié qui s'allume. Idem avec le script de test fourni avec la bibliothèque Adafruit Neopixel
  • NEO_KHZ400: c'était un test au cas où et cela ne change rien par rapport à une fréquence de 800Hz

Tout cela me fait penser que cette copie de neo pixel ring soit a un soucis, soit ne son pas des WS21 truc machin...

Je vous remercie à tous les deux d'avoir répondu aussi rapidement, je ne m'attendais pas à ça!

Je vais essayer de retrouver les références de ces anneaux pour avancer un peu...

J'ai fait un projet de lunettes à leds (voir ici dans projets terminés, le code est dispo, tu peux le tester mais il faut deux anneaux) et j'avais déclaré les anneaux comme ça :

#include "FastLED.h"
// Fastled constants
#define DATA_PIN    2
#define COLOR_ORDER GRB
#define NUM_LEDS    32
#define LED_TYPE    WS2812B
#define BRIGHTNESS  32
CRGB leds[NUM_LEDS];

et dans le setup :

  FastLED.addLeds<LED_TYPE, DATA_PIN, COLOR_ORDER>(leds, NUM_LEDS);
  FastLED.setCorrection(TypicalLEDStrip);
  FastLED.setBrightness(BRIGHTNESS);
  FastLED.clear();

J'utilise la bibliothèque FastLED. Si tu veux tester avec un seul anneau, je pense que ça devrait aller si tu changes 32 en 16 dans la ligne

#define NUM_LEDS    32

Merci à toi lesept!

Je ferais un test mais il faut que je retrouve la référence des ces anneaux pour être sûr. Je pense que j'ai un problème là-dessus déjà...

Edit: je viens de jeter un oeil au "Readme" de la bibliothèque FastLED, effectivement, cela supporte pas mal de matériels. Je vais peut-être trouver mon bonheur, qui sait...

Petite erreur sur le map la valeur max c'est 1023. Et le 255 - n'est pas utile il suffit d'inverser les bornes dans map

currentColourValue = (255 - map( analogRead(sensorValue), 0, 1024, 0, 255 ) );

s'écrit comme ça

currentColourValue = map( analogRead(sensorValue), 0, 1023, 255, 0 );

Autre chose, sauf si c'est à but didactique la gestion des couleur en règlant R V B est généralement décevant. On a du mal à obtenir la couleur que l'on veut. La librairie FastLED permet de travailler en HSV qui est plus intuitif. Un paramètre règle la couleur, le suivant la saturation et le dernier la luminosité.