Brauche Hilfe beim FastLed Sketch

habe mir mit einem uno ambiligth nachgebaut. mit ws2812b stripes...
habe das Netzteil an einer usb geschalteter Steckdosenleiste damit das licht aus geht wenn der tv ausgeschalten ist... allerdings habe ich noch reststrom die anscheinend von der vu+ über usb kommt und somit schaltet er nicht ganz ab... kann man das im sketch so ändern das er komplett dunkel ist?

hier mein sketch:

/////////
//
// 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 228

// Define SPI Pin
#define PIN 6

// Baudrate, higher rate allows faster refresh rate and more LEDs (defined in /etc/boblight.conf)
#define serialRate 500000

//// 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[i] == 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[i].r = r;
leds[i].g = g;
leds[i].b = b;
}
// shows new values
FastLED.show();
}

Das ist generell kritisch, wenn ausgeschaltete Elektronik über Pins anderer Module mit Spannung versorgt wird. Da kann schnell etwas Schaden nehmen.

Die Anweisung "FastLED.setBrightness( 0 );" sollte die Stripes dunkel schalten.
Findest du auch in der Doku zur FastLed.
Das sollte man schon wissen, wenn man damit programmiert.

Im übrigen wird der Sketch nicht mit "Quote" eingefügt, sondern mit "Code-Tags", deiner ist schwer lesbar.

Schaltfläche </> unter Preview, links zu finden.

Hab quote Tags in Code Tags umgewandelt.

Ich möchte Dir eineige Großbuchstaben und einige Punkte und Beistriche schenken damit Deine Fragen verständlicher werden.
Wir wollen nicht Oberlehrer spielen und auf ein fehlerfreies und gramatikalsich richtiger Deutsch pochen aber wir möchten gerne etwas verständliches lesen.

Goto ist in C eine sehr grausige Funktion. Sie zeigt auffällig daß man nicht programmieren kann, weil ein C Programm (fast immer) ohne goto auskommt.

Habe das Netzteil an einer usb geschalteter Steckdosenleiste damit das licht aus geht wenn der tv ausgeschalten ist... allerdings habe ich noch reststrom die anscheinend von der vu+ über usb kommt und somit schaltet er nicht ganz ab... k

Ok, wer schaltet wie über USB die Steckdose? Das TV-Gerät?
Welchen Reststrom?
was ist vu+
Wer schaltet nicht ganz ab?

Bitte genauer erklähren und einen Schaltplan (auch mit Stift und Papier und dann abfotografiert).

Grüße Uwe

hi,

VU+ ist der sat-receiver (linux), der auch das signal für's ambilight an den arduino schickt.

liebe grüße,
stefan

die Steckdose wird vom TV gesteuert--- TV aus ==> Kein Strom am Arduino
Der Reststrom wird wohl von der Ansteuerung vom Receiver kommen...
Vu+ ist ein Hersteller für Enigma2 Receiver (Plugin das steuert ist enigmalight)
Vu+ wird ja nicht ausgeschaltet, sondern nur der TV. die Vu+ gibt natürlich sein Signal an das Arduino weiter...

HotSystems:
Die Anweisung "FastLED.setBrightness( 0 );" sollte die Stripes dunkel schalten.

wo muss ich das dazu eintragen?

VANTOM:
wo muss ich das dazu eintragen?

Du brauchst eine "if-Anweisung" die einen Vorgang (jetzt ausschalten) auswertet.
In dieser setzt du die obige Anweisung zum dunkel schalten.

An welcher Stelle das passieren soll, kannst du entscheiden.
Das geht auch am Anfang der Loop.

Edit:
Wenn du den Arduino ausschaltest, funktioniert das so natürlich nicht.

ja da

HotSystems:
Edit:
Wenn du den Arduino ausschaltest, funktioniert das so natürlich nicht.

Der Arduino geht ja nicht aus wenn ich den strom wegnehme... würde der ausgehen dann hätte ich das Problem nicht.... Anscheinend bekommt er über USB vom Receiver noch irgend ein Signal

Habe das ganze mit WS2801 schon einmal gebaut und da hat es funktioniert... (gleiche Software gleicher Receiver) allerdings anderes Sketch (der Unterstütz aber die WS2812b nicht) musste leider den doofen FastLED nehmen

hi,

der arduino wird ja von der VU+ mitversorgt. Du könntest aber den arduino von dem netzteil für den stripe mit 5V beschicken und die 5V-leitung im USB-kabel kappen (nicht GND).

diesen teil:

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[i].r = r;
leds[i].g = g;
leds[i].b = b;
}

kannst Du auch durch:

Serial.readBytes( (char*)leds, NUM_LEDS * 3);

ersetzen. eventuell das timeout geschickt setzen.

gruß stefan

sorry ich versteh das nicht ganz soll ich jetz

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;*
}
[/quote]
durch
> Serial.readBytes( (char*)leds, NUM_LEDS * 3);
ersetzten?

hi,

ja, sollte das gleiche machen. muß man probieren.

aber wichtiger ist Dein anderes problem. ich hoffe, Du hast einen widerstand zwischen arduino und Din am strip. sonst ist Deine erste LED bald geschichte.

gruß stefan

achso das löst also mein Problem nicht? was macht das sonst? Widerstand habe ich nicht eingelötet... da stand optional.... dachte dann brauche ich das nicht....

Bei 2 verschiedenen Spannungsversorgungen (Arduino und LED-Streifen) schützt der Widerstand an Din die erste LED wenn die Versorgungsspannng der LED fehlt. Ansonsten geht die erste LED kaput.

Vu+ wird ja nicht ausgeschaltet, sondern nur der TV. die Vu+ gibt natürlich sein Signal an das Arduino weiter...

Es ist immer falsch wenn ein Eingang Spannung bekommt wenn der Arduino keine Spannungsversorgung hat.

Grüße Uwe

hi,

um das mal richtig zu verstehen:

der LED-stripe wird von einem netzteil mit 5V versorgt.

der arduino wird über USB von der VU+ versorgt. oder hängt er "zusätzlich" am netzteil?

über USB bekommt er nicht "irgendein signal", sondern wird ganz normal bestromt. klar geht er nicht aus. probier doch mal, die +5V-leitung des usb-kabels zu kappen.

und mach den widerstand rein, sonst gibt's lötarbeit...

gruß stefan

Eisebaer Du hast die USB gesteuerte Steckdosenleiste vergessen.
Die ist am TV-Gerät über USB angeschlossen und versorgt das 5V Netzteil für die LEDs. Die Steckdosenleiste laut TA müßte ausschalten, wenn das TV Gerät kine 5V am USB mehr gibt weil es per fernsteuerung ausgeschaltet wurde.

Grüße Uwe