Alternativ zu den WS2812B-Modulen, die meinst als SMD-Bauteil bekannt sind, gibt es auch einzelne "through-hole" RGB-LEDs (hier in 8mm-Ausführung), die man mit dem Arduino genauso wie die Neopixel-Module ansprechen kann.
Pin-Nummer | Pin | Erklärung |
---|---|---|
1 | GND | Masseanschluss |
2 | DO / DOUT | "Data Out": Datenausgangs-Signal (kann mit DIN der nächsten APA106-LED verbunden werden) |
3 | VDD | Stromversorgung mit +4,5V bis +6V |
4 | DIN | "Data In": Dateneingangs-Signal (wird mit dem Mikrocontroller verbunden) |
siehe: RGB-LED-Modul WS2812B
Der folgende Sketch demonstriert das Durchwechseln der Grundfarben des LED-Moduls nacheinander. Zur
Ansteuerung des RGB-Moduls wird die freie Library
Adafruit_NeoPixel verwendet.
Zu beachten ist, dass beim Erstellen des Adafruit_NeoPixel Objektes die Konstante NEO_RGB
verwendet wird, damit die richtige Farbreihenfolge der LED eingehalten wird. Evtl. kann sich dies
von Modul zu Modul unterscheiden und muss ausprobiert werden.
#include <Adafruit_NeoPixel.h>
#define LED_PIN 9 // or any other PWM capable pin
#define LED_AMOUNT 2
#define BRIGHTNESS 50 // [1..255]
#define DEMO_DELAY 1000 // in milliseconds
Adafruit_NeoPixel apaLeds = Adafruit_NeoPixel(LED_AMOUNT, LED_PIN, NEO_RGB + NEO_KHZ800);
void setup()
{
apaLeds.begin();
}
void loop()
{
for (byte i = 0; i < LED_AMOUNT; i++) {
apaLeds.setPixelColor(i, apaLeds.Color(0, 0, 0));
apaLeds.show();
delay(DEMO_DELAY);
apaLeds.setPixelColor(i, apaLeds.Color(BRIGHTNESS, 0, 0));
apaLeds.show();
delay(DEMO_DELAY);
apaLeds.setPixelColor(i, apaLeds.Color(0, BRIGHTNESS, 0));
apaLeds.show();
delay(DEMO_DELAY);
apaLeds.setPixelColor(i, apaLeds.Color(0, 0, BRIGHTNESS));
apaLeds.show();
delay(DEMO_DELAY);
}
}
Die ursprüngliche Quelle des folgenden Sketches stammt von /lucadentella/apa106_led_tutorial und wurde von mir geringfügig angepasst, dass hier zwei 8mm APA106-LEDs angesteuert werden. Resultat ist ein sehr langsam wechseln der möglichen Farben der APA106-LEDs, die man z.B. als Stimmungslicht verwenden könnte.
#include <Adafruit_NeoPixel.h>
#define LED_PIN 9
#define NUMPIXELS 2
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, LED_PIN, NEO_RGB + NEO_KHZ800);
void setup()
{
pixels.begin();
}
void loop()
{
// hue from 0 to 360 degrees
for (int hue = 0; hue < 360; hue++) {
// saturation and value = 1
setLedColorHSV(hue, 1, 1);
delay(500);
}
}
// thanks to http://forum.arduino.cc/index.php?topic=307655.5
void setLedColorHSV(int h, double s, double v)
{
double r = 0;
double g = 0;
double b = 0;
double hf = h / 60.0;
int i = (int)floor(h / 60.0);
double f = h / 60.0 - i;
double pv = v * (1 - s);
double qv = v * (1 - s * f);
double tv = v * (1 - s * (1 - f));
switch (i) {
case 0:
r = v;
g = tv;
b = pv;
break;
case 1:
r = qv;
g = v;
b = pv;
break;
case 2:
r = pv;
g = v;
b = tv;
break;
case 3:
r = pv;
g = qv;
b = v;
break;
case 4:
r = tv;
g = pv;
b = v;
break;
case 5:
r = v;
g = pv;
b = qv;
break;
}
//set each component to a integer value between 0 and 255
int red = constrain((int)255 * r, 0, 255);
int green = constrain((int)255 * g, 0, 255);
int blue = constrain((int)255 * b, 0, 255);
for (byte pixel = 0; pixel < NUMPIXELS; pixel++) {
pixels.setPixelColor(pixel, pixels.Color(red, green, blue));
}
pixels.show();
}
zurück