2016-04-27 15 views
1

誰かが私がテキストファイル(SD)からデータを抽出してDMXに沿って間違っていると思いますか?コードはP9813部分で機能し、DMXは一般的には動作しますが、SDデータでは動作しません。Arduino SDカードからDMX照明にバイトを読み取る

Pastebin Code Here

私は私の問題は、私は、これはあまりにも多くの値を読んでいると思うライン68であると信じています。 IEのcurrentColorは5つの値(5つのライト)と1つの16進数または3xR/G/Bを格納しています。

考慮対象のSDの値は、「727a 6276 3030 ...」です。私はこれらのバイトはDMXの各チャンネルのPWM値でなければならないと信じていますか?

おかげ

答えて

0

ありがとう:

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未知のデータ型を欠く、テストコンパイルできません)。ここで

は結果です: http://pastebin.com/wHAT6dZB

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

実際にあなたがledsに必要なデータを保存するために、次のように呼び出して、それができたバイト数を返す)(私はあなたのライブラリーを知らないが、私はreadBytesを期待します読む。あなたの助けのすべてが今取り組んでいるとの

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

私は次の数日で試すことを与えるでしょう。 最初の行が何を達成しているかを詳しく説明できますか?私はそれがバイトを読み取っていることを理解していますが、「結果」は何を保持するのでしょうか?これはループを介して最初の "バイト1"を通過するだけで、 "2"は2回目などですか?それとも、 "result"に複数のバイトを格納するreadBytesですか? 理由私はDMX.writeが0-255の単一の値を必要とすることを尋ねます。 leds []変数は、3文字のRGB値を保持する必要があります。これらの値は、leds [0] .r、leds [0] .g、leds [0] .bによって個別にアクセスできます。 – joshjingles

+0

DMXには合計512チャネルのデータが必要です。 DMX.writeが2つの数値を取る場合は、おそらくこれらのうちの1つを設定するので、3つのチャンネルを設定する場合は、otを3回呼び出します。 (ペーストビンにdmxとsdカードのヘッダファイルを追加して、私が見て回るようにしてください) –

+0

うん、もうDMX。最初の#はチャネル(1-512)、2番目のPWM(0-255)です。 私はSDカードから引き出されている変数の内容を理解しようとしています。私の前のコードはserial.printlnを持っていて、結果は4桁のバイトを持つテキストファイルにもかかわらず '1'でした。 変数が一度に1バイトしか持たない場合、私はおそらくPWM値です。変数 "results"に複数のバイトが入っている場合、最初のバイトを読み、ch1 DMXに書き込んだり、2バイト目にスキップしたり、DMXに書き込んだりするなどのループが必要ですか? leds [0]はCRGBとして定義されており、ライブラリでは3つのPWM値を保持しています。 – joshjingles

関連する問題