filmov
tv
Cyrob : WS2812B NeoPixel, analyse et visu avec un Micsig STO1104C+
Показать описание
ERRATA : Oups! J’ai fait une erreur et dis une bêtise dans mon explication. Contrairement à de nombreux systèmes basés sur des registres à décalage, ces leds mémorisent la première séquence de 24 bits après un reset et laissent passer les bits suivants. Il faut donc envoyer les valeurs dans l’ordre des leds (la plus proche du µcontroleur en premier). C’est assez malin en fait ça cela permet des softs qui fonctionnent indépendamment du nombre de led, les premières fonctionnant toujours de la même manière. Merci aux internautes ayant remarqués ma boulette. J’aurais du lire le data sheet avec plus d’attention. Note que le principe reste le même mais l’ordre est différent.
Data Sheet :
Article Micsig sur mon site:
Le site de Micsig:
La chaine de Micsig:
---------------------------------------------------------------------------
---------------------------------------------------------------------------
Mon code Arduino de test:
ATTENTION:
YT est incapable de gérer les signes Inférieurs et supérieurs dans les commentaires (C'est pourtant pas compliqué !!)
Donc je les ai remplacé par INF et SUP, il faudra les remettre pour compiler.
// NeoPixel Cyrob Eval Apr19
#include INF Adafruit_NeoPixel.h SUP
#ifdef __AVR__
#include INF avr/power.h SUP
#endif
// IO
#define kInModePin 2
#define kInTrigPin 3
#define kOutLedPin 6
//Misc Constants
#define kNbLed 2
#define kMaxLum 64
#define kNbSeq 10
Adafruit_NeoPixel gNeoPix = Adafruit_NeoPixel(kNbLed, kOutLedPin, NEO_GRB + NEO_KHZ800);
uint32_t gSeq[kNbSeq][kNbLed];
int gCurSeq=0;
//-------------------------------------------------------------
bool Pushed(byte Pin){
if (digitalRead(Pin)==HIGH)
return false;
delay(50); // Debounce
while (digitalRead(Pin)==LOW);
delay(50); // Debounce
return true;
}
//-------------------------------------------------------------
void Refresh(){
}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void setup() {
pinMode(kInModePin, INPUT_PULLUP);
pinMode(kInTrigPin, INPUT_PULLUP);
gSeq[0][0]=gNeoPix.Color(kMaxLum,kMaxLum,kMaxLum);gSeq[0][1]=gNeoPix.Color(kMaxLum,kMaxLum,kMaxLum);
gSeq[1][0]=gNeoPix.Color(0,0,0);gSeq[1][1]=gNeoPix.Color(0,0,0);
gSeq[2][0]=gNeoPix.Color(kMaxLum,0,0);gSeq[2][1]=gNeoPix.Color(0,0,kMaxLum);
gSeq[3][0]=gNeoPix.Color(0x55,0,0xAA);gSeq[3][1]=gNeoPix.Color(0,0,0);
gSeq[4][0]=gNeoPix.Color(0,0,0);gSeq[4][1]=gNeoPix.Color(0x55,0,0xAA);
gSeq[5][0]=gNeoPix.Color(1,1,1);gSeq[5][1]=gNeoPix.Color(2,2,2);
gSeq[6][0]=gNeoPix.Color(255,255,255);gSeq[6][1]=gNeoPix.Color(255,255,255);
gSeq[7][0]=gNeoPix.Color(0,0,kMaxLum);gSeq[7][1]=gNeoPix.Color(kMaxLum,0,0);
gSeq[8][0]=gNeoPix.Color(kMaxLum,0,0);gSeq[8][1]=gNeoPix.Color(0,0,kMaxLum);
gSeq[9][0]=gNeoPix.Color(0,kMaxLum,0);gSeq[9][1]=gNeoPix.Color(0,kMaxLum,0);
}
//=============================================================
void loop() {
if (Pushed(kInModePin)){
if (gCurSeq++ SUP kNbSeq)
gCurSeq=0;
Refresh();
}
if (Pushed(kInTrigPin)){
Refresh();
}
}
Rappel: Je ne vends rien et ne propose aucun service, même payant.
Déontologie de la chaine:
Data Sheet :
Article Micsig sur mon site:
Le site de Micsig:
La chaine de Micsig:
---------------------------------------------------------------------------
---------------------------------------------------------------------------
Mon code Arduino de test:
ATTENTION:
YT est incapable de gérer les signes Inférieurs et supérieurs dans les commentaires (C'est pourtant pas compliqué !!)
Donc je les ai remplacé par INF et SUP, il faudra les remettre pour compiler.
// NeoPixel Cyrob Eval Apr19
#include INF Adafruit_NeoPixel.h SUP
#ifdef __AVR__
#include INF avr/power.h SUP
#endif
// IO
#define kInModePin 2
#define kInTrigPin 3
#define kOutLedPin 6
//Misc Constants
#define kNbLed 2
#define kMaxLum 64
#define kNbSeq 10
Adafruit_NeoPixel gNeoPix = Adafruit_NeoPixel(kNbLed, kOutLedPin, NEO_GRB + NEO_KHZ800);
uint32_t gSeq[kNbSeq][kNbLed];
int gCurSeq=0;
//-------------------------------------------------------------
bool Pushed(byte Pin){
if (digitalRead(Pin)==HIGH)
return false;
delay(50); // Debounce
while (digitalRead(Pin)==LOW);
delay(50); // Debounce
return true;
}
//-------------------------------------------------------------
void Refresh(){
}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void setup() {
pinMode(kInModePin, INPUT_PULLUP);
pinMode(kInTrigPin, INPUT_PULLUP);
gSeq[0][0]=gNeoPix.Color(kMaxLum,kMaxLum,kMaxLum);gSeq[0][1]=gNeoPix.Color(kMaxLum,kMaxLum,kMaxLum);
gSeq[1][0]=gNeoPix.Color(0,0,0);gSeq[1][1]=gNeoPix.Color(0,0,0);
gSeq[2][0]=gNeoPix.Color(kMaxLum,0,0);gSeq[2][1]=gNeoPix.Color(0,0,kMaxLum);
gSeq[3][0]=gNeoPix.Color(0x55,0,0xAA);gSeq[3][1]=gNeoPix.Color(0,0,0);
gSeq[4][0]=gNeoPix.Color(0,0,0);gSeq[4][1]=gNeoPix.Color(0x55,0,0xAA);
gSeq[5][0]=gNeoPix.Color(1,1,1);gSeq[5][1]=gNeoPix.Color(2,2,2);
gSeq[6][0]=gNeoPix.Color(255,255,255);gSeq[6][1]=gNeoPix.Color(255,255,255);
gSeq[7][0]=gNeoPix.Color(0,0,kMaxLum);gSeq[7][1]=gNeoPix.Color(kMaxLum,0,0);
gSeq[8][0]=gNeoPix.Color(kMaxLum,0,0);gSeq[8][1]=gNeoPix.Color(0,0,kMaxLum);
gSeq[9][0]=gNeoPix.Color(0,kMaxLum,0);gSeq[9][1]=gNeoPix.Color(0,kMaxLum,0);
}
//=============================================================
void loop() {
if (Pushed(kInModePin)){
if (gCurSeq++ SUP kNbSeq)
gCurSeq=0;
Refresh();
}
if (Pushed(kInTrigPin)){
Refresh();
}
}
Rappel: Je ne vends rien et ne propose aucun service, même payant.
Déontologie de la chaine:
Комментарии