2016-05-24 7 views
-3

arduinoのループ機能で8バイトのデータを含む4つのメッセージをシリアル出力に常に送信する必要があります。送信されるメッセージデータは、ボード上の2つのデジタル入力に依存します。ここにそれがどのように見えるのですか:if文に応じて配列の値を変更する

uint8_t msg_1[8] 
uint8_t msg_2[8] 
uint8_t msg_3[8] 
uint8_t msg_4[8] 

uint8_t first_1[] = {0x89, 0x80, 0xF8, 0x73, 0x00, 0x00, 0xCF, 0xFF}; 
uint8_t first_2[] = {0x89, 0x80, 0xF8, 0x73, 0x00, 0x00, 0xCF, 0xFF}; 
uint8_t first_3[] = {0x89, 0x80, 0xF8, 0x73, 0x00, 0x00, 0xCF, 0xFF}; 
uint8_t first_4[] = {0x89, 0x80, 0xF8, 0x73, 0x00, 0x00, 0xCF, 0xFF}; 

uint8_t second_1[] = {0x89, 0x80, 0xF8, 0x73, 0x00, 0x00, 0xCF, 0xFF}; 
uint8_t second_2[] = {0x89, 0x80, 0xF8, 0x73, 0x00, 0x00, 0xCF, 0xFF}; 
uint8_t second_3[] = {0x89, 0x80, 0xF8, 0x73, 0x00, 0x00, 0xCF, 0xFF}; 
uint8_t second_4[] = {0x89, 0x80, 0xF8, 0x73, 0x00, 0x00, 0xCF, 0xFF}; 


void loop (void){ 

    if(input1 == HIGH && input2 == LOW){ 
     msg = first; // <====== how to assign it? 
    } 
    else if (input1 == LOW && input2 == HIGH) 
     msg = second; // <===== how to assign it? 
} 

serial.write(msg_1,8) 
serial.write(msg_2,8) 
serial.write(msg_3,8) 
serial.write(msg_4,8) 
} 

私の質問はif文で別の配列にどのように割り当てるのですか?私はポインタや何を使うべきですか?

+0

、あなたはMSGを必要とするとき?あなたはまったくそれを使用していないようです。 – 4pie0

+0

コードをインデントしてください。 –

+1

2D配列はもっとエレガントに見えるでしょうか?または、ただ1Dのアレイですか? – Lundin

答えて

1
値に

使用ポインター:

uint8_t *msg_1; 
uint8_t *msg_2; 
uint8_t *msg_3; 
uint8_t *msg_4; 

uint8_t first_1[] = {0x89, 0x80, 0xF8, 0x73, 0x00, 0x00, 0xCF, 0xFF}; 
uint8_t first_2[] = {0x89, 0x80, 0xF8, 0x73, 0x00, 0x00, 0xCF, 0xFF}; 
uint8_t first_3[] = {0x89, 0x80, 0xF8, 0x73, 0x00, 0x00, 0xCF, 0xFF}; 
uint8_t first_4[] = {0x89, 0x80, 0xF8, 0x73, 0x00, 0x00, 0xCF, 0xFF}; 

uint8_t second_1[] = {0x89, 0x80, 0xF8, 0x73, 0x00, 0x00, 0xCF, 0xFF}; 
uint8_t second_2[] = {0x89, 0x80, 0xF8, 0x73, 0x00, 0x00, 0xCF, 0xFF}; 
uint8_t second_3[] = {0x89, 0x80, 0xF8, 0x73, 0x00, 0x00, 0xCF, 0xFF}; 
uint8_t second_4[] = {0x89, 0x80, 0xF8, 0x73, 0x00, 0x00, 0xCF, 0xFF}; 


void loop (void){ 

    if(input1 == HIGH && input2 == LOW){ 
    msg_1 = first_1; 
    msg_2 = first_2; 
    msg_3 = first_3; 
    msg_4 = first_4; 
    } 
    else if (input1 == LOW && input2 == HIGH) { 
    msg_1 = second_1; 
    msg_2 = second_2; 
    msg_3 = second_3; 
    msg_4 = second_4; 
    } 

    serial.write(msg_1,8) 
    serial.write(msg_2,8) 
    serial.write(msg_3,8) 
    serial.write(msg_4,8) 
} 
+0

4つのメンバーを持つ構造体を使うことができるので、4の代わりに1つの代入しかないようにしてください。 –

+0

質問のインデントされていないコードは悪いですが、31Kユーザーの答えは悪いです... – LPs

+0

@ LPs - あなたの答えを教えてください... – Sean

1

あなたはメッセージの構造体を定義し、その構造体の行列を定義することができます。

例:

#define MESSAGE_SIZE 8 

struct message 
{ 
    uint8_t body[MESSAGE_SIZE]; 
}; 

struct message msg[4][2] = { 
          { {{0x89, 0x80, 0xF8, 0x73, 0x00, 0x00, 0xCF, 0xFF}}, {{0x89, 0x81, 0xF8, 0x73, 0x00, 0x00, 0xCF, 0xFF}} }, 
          { {{0x89, 0x82, 0xF8, 0x73, 0x00, 0x00, 0xCF, 0xFF}}, {{0x89, 0x83, 0xF8, 0x73, 0x00, 0x00, 0xCF, 0xFF}} }, 
          { {{0x89, 0x84, 0xF8, 0x73, 0x00, 0x00, 0xCF, 0xFF}}, {{0x89, 0x85, 0xF8, 0x73, 0x00, 0x00, 0xCF, 0xFF}} }, 
          { {{0x89, 0x86, 0xF8, 0x73, 0x00, 0x00, 0xCF, 0xFF}}, {{0x89, 0x87, 0xF8, 0x73, 0x00, 0x00, 0xCF, 0xFF}} } 
          }; 

void loop (void) 
{ 
    int index = 0; 

    if(input1 == HIGH && input2 == LOW) 
    { 
     index = 0; 
    } 
    else if (input1 == LOW && input2 == HIGH) 
    { 
     index = 1; 
    } 

    int i = 0; 
    for (i=0; i< 4; i++) 
    { 
     serial.write(msg[i][index].body,MESSAGE_SIZE); 
    } 
} 

最高はメッセージごとに要求された信号の状態を追加することです:

#define MESSAGE_SIZE 8 

struct message 
{ 
    uint8_t input1; 
    uint8_t input2; 
    uint8_t body[MESSAGE_SIZE]; 
}; 

struct message msg[] = { 
          { HIGH, LOW , {0x89, 0x80, 0xF8, 0x73, 0x00, 0x00, 0xCF, 0xFF}}, 
          { LOW , HIGH, {0x89, 0x80, 0xF8, 0x73, 0x00, 0x00, 0xCF, 0xFF}}, 
          { HIGH, LOW , {0x89, 0x80, 0xF8, 0x73, 0x00, 0x00, 0xCF, 0xFF}}, 
          { LOW , HIGH, {0x89, 0x80, 0xF8, 0x73, 0x00, 0x00, 0xCF, 0xFF}}, 
          { HIGH, LOW , {0x89, 0x80, 0xF8, 0x73, 0x00, 0x00, 0xCF, 0xFF}}, 
          { LOW , HIGH, {0x89, 0x80, 0xF8, 0x73, 0x00, 0x00, 0xCF, 0xFF}}, 
          { HIGH, LOW , {0x89, 0x80, 0xF8, 0x73, 0x00, 0x00, 0xCF, 0xFF}}, 
          { LOW , HIGH, {0x89, 0x80, 0xF8, 0x73, 0x00, 0x00, 0xCF, 0xFF}} 
         }; 

#define MESSAGE_COUNT sizeof(msg)/sizeof(msg[0]) 

void loop (void) 
{ 
    int i = 0; 
    for (i=0; i<MESSAGE_COUNT; i++) 
    { 
     if ((input1 == msg[i].input1) && 
      (input1 == msg[i].input1)) 
     { 
      serial.write(msg[i].body,MESSAGE_SIZE); 
     } 
    } 
} 
関連する問題