2016-04-27 3 views
1

Wer hat schon mal was falsch gemacht, wenn ich Daten aus einer Textdatei (SD) extrahiere und DMX sende? Der Code funktioniert für den P9813-Teil und das DMX funktioniert im Allgemeinen, aber nicht die SD-Daten.Bytes von Arduino SD Karte zu DMX Lighting lesen

Pastebin Code Here

Ich glaube, meine Frage an der Linie ist 68. Ich denke, dies zu viele Werte liest. IE currentColor speichert 5 Werte (5 Lichter) im Vergleich zu 1 Hex oder 3xR/G/B.

Die zu berücksichtigenden Werte im SD sind ... "727a 6276 3030 ...". Ich glaube, dass diese Bytes PWM-Wert jeder DMX-Kanäle sein sollten, nein?

Dank

Antwort

0
currentColor = fxdata.readBytes((char*)leds, NUM_LEDS*3); //attempt to store SD card read data as RGB 

Ich weiß nicht, die Bibliothek, aber ich würde ein readbytes() aufrufen, wie dies eigentlich erwarten, dass die Daten, die Sie in leds speichern möchten, und Zurückkehren, wie viele Bytes es konnte lesen.

result = fxdata.readBytes((char*)leds, NUM_LEDS*3); //attempt to store SD card read data as RGB 
if (result != (NUM_LEDS*3)) 
{ 
    /* Handle the error here.. an action can be fill inn default values in leds[] if SD card is not working 
} 
/* from this point, use leds[], not currentColor */ 

überarbeitet Beispiel (nicht getestet kompilieren, Umwelt verwendet fehlt, Datentyp CRGB unbekannt):

void sendDMX(int theStrip, CRGB *theColor) { 
    for(int z=0; z<3; z++) { 
    DmxSimple.write((theStrip + z), theColor[z]); //DMX Channel, PWM Value 
    } 
} 

void loop() 
{ 
    fxdata = SD.open("TCL_DMX.dat"); // read only 
    if (fxdata) 
    { 
     Serial.println("file open ok");  
    } 

    while (fxdata.available()) 
    { 
    fxdata.readBytes(leds, sizeof (leds)); //attempt to store SD card read data as RGB 

    Serial.println(fxdata); 

    sendDMX(1, leds); //RGB Strip #, RGB bytes from SD .dat file 
    FastLED.show(); 
    delay(500); 
    } 

    // close the file in order to prevent hanging IO or similar throughout time 
    fxdata.close(); 
} 
+0

ich, dass ein Versuch in den nächsten Tagen geben werde. Könnten Sie näher erläutern, was die erste Zeile erreicht? Ich verstehe, dass es Bytes liest, aber was würde "Ergebnisse" halten? Geht es beim ersten Mal einfach durch das Byte "byte 1", beim zweiten Mal "byte 2" usw. Oder speichert das readBytes mehrere Bytes in "result"? Grund Ich frage, ist das DMX.write endet mit einem einzelnen Wert 0-255. Die Variable leds [] sollte den dreistelligen RGB-Wert enthalten, auf den einzeln mit den LEDs [0] .r, leds [0] .g, leds [0] .b zugegriffen werden kann. – joshjingles

+0

DMX sollte insgesamt 512 Datenkanäle haben. Wenn DMX.write zwei numerische Werte benötigt, wird wahrscheinlich einer davon gesetzt. Wenn Sie also drei Kanäle einstellen möchten, rufen Sie drei Mal auf. (Fügen Sie die Header-Dateien dmx und sd card in pastebin hinzu, damit ich einen Blick darauf werfen kann) –

+0

Yep, re DMX. Die erste # ist der Kanal (1-512), die zweite PWM (0-255). Ich versuche zu verstehen, was in der Variablen ist, die von der SD-Karte gezogen wird. Mein vorheriger Code hatte eine serial.println und das Ergebnis war '1' trotz der Textdatei mit 4-stelligen Bytes. Wenn die Variable immer nur 1 Byte hat, dann ist es wahrscheinlich ein PWM-Wert. Wenn die Variable "resultes" mehrere Bytes enthält, müsste ich dann eine Schleife lesen, um das erste Byte zu lesen, es in ch1 DMX schreiben, zum zweiten Byte springen, auf ch2 DMX schreiben usw.? Die LED [0] ist als CRGB definiert, was in der Bibliothek bedeutet, dass sie 3 PWM-Werte enthält. – joshjingles