2016-05-24 3 views
-3

Мне нужно постоянно отправлять 4 сообщения, каждый из которых содержит 8 байтов данных для последовательного вывода в моей функции цикла в arduino. Данные сообщений, которые отправляются, зависят от двух цифровых входов на моей плате. Вот как это выглядит:изменение значений массива в зависимости от оператора 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

и когда вам нужно Сообщи? Вы, кажется, не используете его вообще. – 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 –

+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); 
     } 
    } 
} 
Смежные вопросы