NeoPixel
WS2812b
Sicherlich gibt es mehr als eine oder DIE LED, nur bin ich von meinen WS2812b so begeistert, dass ich hier eine Seite zu mache.
Ich hatte mit schon vor längerer Zeit einen 100er Pack geholt, also kein Band, sondern eine Packung, wo 10×10 Stück aneinander gesteckt sind.
Man kann die ganz leicht ausbrechen und miteinander verlöten oder wie auch immer.
Trotz der geringen Größe kann man die Beschriftung für Eingang, Daten, Ground, Ausgang, … super lesen und erstaunlich gut löten.
Auch wenn sie mit 5V angeben sind, so habe ich einen Widerstand vorgesteckt. Auch bei der Datenleitung habe ich mehrfach gelesen, dass sie mit einem Widerstand betrieben werden soll. So habe ich auch da einen 220Ohm eingesetzt.
Mit der Bibliothek von Adafruid_NeoPixel, die reichlich Beispiel-Sketches mitbringt, ist es auch für Anfänger wie mich recht einfach erste Erfolge zu erzielen.
Naja, und da habe ich dann einen von genommen und ausgemistet. Der beschränkt sich zur Zeit noch auf RGB, nicht auf RGBW. Das weiße Licht, ja es sind 4 Farben in der LED, brauche ich zur Zeit noch nicht und lasse es erst mal außen vor.
Gebraucht wird:
ein paar Kabel
2 Widerstände 220Ohm
WS2812b (die LED)
eventuell löten, da die LED angeschlossen werden muss.

Der Plan stimmt nicht so ganz, da an meinen LEDs 3 Eingänge und entsprechend 3 Ausgänge haben, damit sie durchgeschliffen werden können.
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h> // Required for 16 MHz Adafruit Trinket
#endif
#define PIN 7 // Pin auf dem Steuerung liegt
// Die 1 durch Anzahl der LEDs ersetzen
Adafruit_NeoPixel pixels(1, PIN, NEO_GRB + NEO_KHZ800);
void setup() {
// These lines are specifically to support the Adafruit Trinket 5V 16 MHz.
// Any other board, you can remove this part (but no harm leaving it):
#if defined(__AVR_ATtiny85__) && (F_CPU == 16000000)
clock_prescale_set(clock_div_1);
#endif
// END of Trinket-specific code.
pixels.begin(); // INITIALIZE NeoPixel strip object (REQUIRED)
}
void loop() {
pixels.clear(); // Set all pixel colors to 'off'
// pixels.Color() nutzt RGB Werte, von 0,0,0 bis 255,255,255
// mit der ersten 0 wird die erste LED angesprochen, 1 waere dann LED 2
pixels.setPixelColor(0, pixels.Color(150, 0, 0));
pixels.show(); // Aktuelle Farbe senden
}
Wie man sieht, habe ich eine einfache Beispieldatei nur etwas geändert und voll „Ballast“ befreit. Wenn du das so übernimmst, dann leuchtet deine LED rot. Wie in dem Kommentar zu lesen ist, siehst du ja wo man die Farben einstellt.
Das Programm lässt sich hier jetzt super erweitern. Na klar gibt es auch hier wieder 100 Wege um an das Ziel zu kommen.
Um einen groben Farbverlauf in der LED zu bekommen, habe ich mir noch einen kleinen Zusatz geschrieben, der die Farbwerte bei jedem Durchlauf erhöht und auch wieder verringert.
Auch der geht eleganter – darum geht es mir zur Zeit aber noch nicht.
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h> // Required for 16 MHz Adafruit Trinket
#endif
#define PIN 7 // Pin auf dem Steuerung liegt
int rot = 0;
int gruen = 0;
int blau = 0;
// Die 1 durch Anzahl der LEDs ersetzen
Adafruit_NeoPixel pixels(1, PIN, NEO_GRB + NEO_KHZ800);
void setup() {
// These lines are specifically to support the Adafruit Trinket 5V 16 MHz.
// Any other board, you can remove this part (but no harm leaving it):
#if defined(__AVR_ATtiny85__) && (F_CPU == 16000000)
clock_prescale_set(clock_div_1);
#endif
// END of Trinket-specific code.
pixels.begin(); // INITIALIZE NeoPixel strip object (REQUIRED)
}
void loop() {
pixels.clear(); // Set all pixel colors to 'off'
if (rot<=250, gruen<=250, blau<=250)
{
// pixels.Color() nutzt RGB Werte, von 0,0,0 bis 255,255,255
// mit der ersten 0 wird die erste LED angesprochen, 1 waere dann LED 2
pixels.setPixelColor(0, pixels.Color(rot, gruen, blau));
pixels.show(); // Aktuelle Farbe senden
rot = rot +1, gruen = gruen +2, blau = blau +5;
delay(50);
}
else {
rot = rot -5, gruen = gruen -2, blau = blau -5;
}
}