WS2812B - Sketch funktioniert nicht. Benötige Hilfe.

Ich möchte eine einzelne WS2812B mit einem Attiny85 dazu nutzen, mir durch verschiedene Farben verschiedene Zustände einer Schaltung zu signalisieren. Hierzu habe ich mir die Adafruit_NeoPixel.h. herunter geladen und aus dem Beispiel die nötigen Zeilen kopiert, um grundliegende Möglichkeiten zu testen. Leider scheitert es schon an einem simplen Wechselblinken grün/rot. Die LED blinkt nur einmalig grün auf und bleibt dann aus.

Könnte mir bitte jemand erklären, wo mein Fehler liegt?

#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>
#endif

#define PIN 1

Adafruit_NeoPixel pixels = Adafruit_NeoPixel(1, PIN, NEO_GRB + NEO_KHZ800);

void setup() {
 
 #if defined (__AVR_ATtiny85__)
 if (F_CPU == 16000000) clock_prescale_set(clock_div_1);
 #endif
 pixels.begin();

}

void loop() {

   pixels.setPixelColor(0, 0, 255, 0); // grün
   pixels.setBrightness(200);
   pixels.show();
   delay(200);
   pixels.setPixelColor(0, 0, 255, 0); // grün
   pixels.setBrightness(0);
   pixels.show();
   delay(500);

   pixels.setPixelColor(0, 255, 0, 0); // rot
   pixels.setBrightness(200);
   pixels.show();
   delay(200);
   pixels.setPixelColor(0, 255, 0, 0); // rot
   pixels.setBrightness(0);
   pixels.show();
   delay(500);

}

Die setBrightness Methode ist nicht dazu gedacht, im Betrieb die Helligkeit zu ändern, sondern nur um einmalig beim Setup eine Dämpfung anzuwenden.

Lass die Methode weg, und setze doch einfach das Pixel komplett auf RGB 0,0,0 (= Schwarz = Aus) - dann sollte es klappen.

pixels.setPixelColor(0, 0, 255, 0); // grün
pixels.show();
delay(200);

pixels.setPixelColor(0, 0, 0, 0); // schwarz
pixels.show();
delay(500);

pixels.setPixelColor(0, 255, 0, 0); // rot
pixels.show();
delay(200);

pixels.setPixelColor(0, 0, 0, 0); // schwarz
pixels.show();
delay(500);

~Luchs

Danke für den Tip. Der war hilfreich. Dabei habe ich dann endlich den Fehler gefunden. Man darf

pixels.setBrightness(0);

nicht auf null setzen. Der kleinste Wert ist eins. So funktionierte es dann, bevor ich es nach Deinem Vorschlag umgebaut habe:

pixels.setBrightness(1);

Nun läuft alles wie es soll.