currentColor = fxdata.readBytes((char*)leds, NUM_LEDS*3); //attempt to store SD card read data as RGB
Я не знаю, в вашей библиотеке, но я бы ожидать readBytes() вызов, как это на самом деле хранить данные, которые вы хотите в leds
, и возвращение сколько байт было в состоянии читать.
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 */
пересмотренный пример (не компилируется испытания, отсутствие среды используется, тип данных CRGB неизвестен):
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();
}
Я дам, что попробовать в ближайшие пару дней. Не могли бы вы рассказать о достижении первой линии? Я понимаю, что он читает байты, но что будет «результатом»? Проходит ли он просто через «байт 1» в первый раз через цикл, «байт 2» второй раз и т. Д. Или это readBytes, хранящие несколько байтов в «результате»? Причина, по которой я спрашиваю, - это то, что DMX.write заканчивается тем, что требуется одно значение 0-255. Переменная leds [] должна содержать значение RGB 3 символа, к которому можно обращаться индивидуально с помощью светодиодов [0] .r, светодиоды [0] .g, светодиоды [0] .b. – joshjingles
DMX должен иметь общую av 512 каналов данных. Если DMX.write принимает два числовых значения, он, вероятно, устанавливает один из них, поэтому, если вы хотите установить 3 канала, вызовите их три раза. (Добавьте файлы заголовков dmx и sd в pastebin, чтобы я мог заглянуть) –
Yep, re DMX. Первый № - это канал (1-512), второй PWM (0-255). Я пытаюсь понять, что находится в переменной, которую вытаскивают из SD-карты. Мой предыдущий код имел serial.println, и результат был «1», несмотря на текстовый файл с 4-значными байтами. Если переменная имеет только один байт за раз, то я, скорее всего, значение ШИМ. Если переменная «результаты» содержит несколько байтов, мне нужен цикл для чтения первого байта, записать его в ch1 DMX, пропустить второй байт, записать в ch2 DMX и т. Д.? Светодиоды [0] определяются как CRGB, который в библиотеке означает, что он удерживает 3 значения PWM. – joshjingles