Werfe mal ein freundliches Hallo in die Runde,
komme aus BW nahe Karlsruhe und bekomme die besagten Stripes mit dem UNO r3 nicht zum laufen.
Habe es mit NeoPixel und FastLED versucht, welche auch brav die LEDs mit ihren Testprogrammen ansteuern.
Sobald ich aber versuche die LEDs vom Linux-Receiver mit dem Boblight Plugin anzusprechen, stoppt das Testprogramm
kurz seinen Durchlauf, läuft dann aber einfach weiter.
Ich dachte mir, wenn Boblight doch mit den WS2801 klarkommt (LEDstream.pde), sollte das doch auch mit den WS2812b funktionieren, da es sich ja auch um ein Schieberegister handelt. Aber irgendetwas fehlt vermutlich im Code, damit Boblight richtig mit dem Uno sprechen kann.
Habe mich dann auf die Suche im Inet gemacht und folgenden Code gefunden.
//////////
//
// Arduino interface for the use of ws2812 operated LEDs
// Uses Adalight protocol and is compatible with Boblight, Prismatik etc
// "Magic Word" for synchronisation is 'Ada' followed by LED High, Low and Checksum
//
///// User definitions /////
#include "FastLED.h"
// Define the number of LEDs
#define NUM_LEDS 30
// Define SPI Pin
#define PIN 13
// Baudrate, higher rate allows faster refresh rate and more LEDs (defined in /etc/boblight.conf)
#define serialRate 115200
//// End of user definitions /////
// Utilises FastSPI_LED2
#define FORCE_SOFTWARE_SPI
#define FORCE_SOFTWARE_PINS
// Adalight sends a "Magic Word" (defined in /etc/boblight.conf) before sending the pixel data
uint8_t prefix[] = {'A', 'd', 'a'}, hi, lo, chk, i;
// initialise LED-array
CRGB leds[NUM_LEDS];
void setup()
{
FastLED.addLeds<WS2812, PIN, RGB>(leds, NUM_LEDS);
// initial RGB flash
LEDS.showColor(CRGB(255, 0, 0));
delay(500);
LEDS.showColor(CRGB(0, 255, 0));
delay(500);
LEDS.showColor(CRGB(0, 0, 255));
delay(500);
LEDS.showColor(CRGB(0, 0, 0));
Serial.begin(serialRate);
Serial.print("Ada\n"); // Send "Magic Word" string to host
}
void loop() {
// wait for first byte of Magic Word
for(i = 0; i < sizeof prefix; ++i) {
waitLoop: while (!Serial.available()) ;;
// Check next byte in Magic Word
if(prefix == Serial.read()) continue;
// otherwise, start over
i = 0;
goto waitLoop;
}
// Hi, Lo, Checksum
while (!Serial.available()) ;;
hi=Serial.read();
while (!Serial.available()) ;;
lo=Serial.read();
while (!Serial.available()) ;;
chk=Serial.read();
// if checksum does not match go back to wait
if (chk != (hi ^ lo ^ 0x55))
{
i=0;
goto waitLoop;
}
memset(leds, 0, NUM_LEDS * sizeof(struct CRGB));
// read the transmission data and set LED values
for (uint8_t i = 0; i < NUM_LEDS; i++) {
byte r, g, b;
while(!Serial.available());
r = Serial.read();
while(!Serial.available());
g = Serial.read();
while(!Serial.available());
b = Serial.read();
leds.r = r;
leds.g = g;
leds.b = b;
}
// shows new values
FastLED.show();
}
Ein User hat mit diesem anscheinend die LEDs zum Laufen gebracht. Also habe ich versucht den auf den UNO zu laden.
Leider kommt es beim Kompilieren zu folgender Fehlermeldung:
enigmalight.ino: In function 'void loop()':
enigmalight:55: error: ISO C++ forbids comparison between pointer and integer
enigmalight:87: error: request for member 'r' in 'leds', which is of non-class type 'CRGB [30]'
enigmalight:88: error: request for member 'g' in 'leds', which is of non-class type 'CRGB [30]'
enigmalight:89: error: request for member 'b' in 'leds', which is of non-class type 'CRGB [30]'
Jetzt komm ich leider nicht mehr weiter!