2017-08-03 146 views
0

Arduino Unoの構造体配列に格納されたデータを作成してアクセスするのには苦労しています。Arduinoの構造体配列データへのアクセス

私はC++/Arduinoに慣れていませんが、私の頭の中では以下のように動作します。 ライトとstuffはすべて他のコードで動作しますが、light [i]でライトを変更しようとすると動作しません。

ポインタと関係するかもしれませんが、いつどこで使用するかはまだ分かりません。

struct light 
{ 
    byte k; 
    byte r; 
    byte g; 
    byte b; 
}; 

typedef struct light Light; 

Light l1; 
Light l2; 
Light l3; 

Light lights[3] = {l1, l2, l3}; 

void setup() { 
    l1 = {0, 0, 0, 0}; 
    l2 = {0, 0, 0, 0}; 
    l3 = {0, 0, 0, 0}; 
} 

void loop() 
{ 
    l1 = {0, 0, 0, 0}; 
    l2 = {0, 0, 0, 0}; 
    l3 = {0, 0, 0, 0}; 


    //turn on different light every 3 seconds 
    int i; 

    if (millis() % 9000 < 3000) { 
     i = 0; 
    } else if ((millis() % 9000 >= 3000) && (millis() % 9000 < 6000)) { 
     i = 1; 
    } else { 
     i = 2; 
    } 

    lights[i] = {255, 255,0, 0}; 

    // if this is uncommented l1 turns red 
    //l1 = {255,255,0,0} 

    //passes light data to DMX controller (works fine) 
    ~turnOnlight(l1) 
    ~turnOnLight(l2) 
    ~turnOnLight(l3) 
} 

ありがとうございます。

+0

Arduinoは実際にCではなくCを使用しています。 –

+0

ご質問は、詳細を教えてください。コードにはどのような問題がありますか?エラーが出ますか?クラッシュ?予想外の結果ですか?他に何か?あなたがまだそれをしていないなら、[良い質問をする方法について](http://stackoverflow.com/help/how-to-ask)を読んでください。 –

+0

@Someprogrammerdude oops、申し訳ありませんが編集されます。 arduino/c/C++の新機能 –

答えて

0

あなたはおそらくあなたの配列は、各光を指すようにしたい、そして、あなたはライト*ライトを必要とする[3] = {& L1、& L2、& L3}と、このようなポインタの間接参照にあなたが持っているアレイメンバーをaccesing * lights [i] = {255、255,0、0};

関連する問題