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();
}
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
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) –
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