Как обьединить переменные uint16_t с элементами массива
- Войдите на сайт для отправки комментариев
Вс, 12/07/2015 - 08:23
Люди подскажите как обьединить несколько переменных uint16 с массивом uint8[], чтоб переменные были элементами этого массива. Хочу так обьединить чтоб отправлять эти переменные по uart как элементы массива побайтно.
uint16_t temperature_1; //0 1
uint16_t temperature_2; //2 3
uint16_t temperature_3; //4 5
uint16_t temperature_4; //6 7
uint16_t temperature_5; //8 9
uint16_t temperature_6; //10 11
uint16_t oil_pressure; //12 13
uint16_t power_load; //14 15
uint16_t rpm_speed; //16 17
эти переменные должны быть элементами массива uint8_t massive[18];
Я так понимаю что нужно использовать union, но не могу найти примера как это должно выглядеть
Как-нибудь так, например:
struct { uint16_t temperature_1; //0 1 uint16_t temperature_2; //2 3 uint16_t temperature_3; //4 5 uint16_t temperature_4; //6 7 } temperature; ..... Serial.write( ( byte* )( &temperature ), sizeof( temperature ) );Не обещаю что всё до буквы правильно, но общий смысл думаю понятен.
union { struct { uint16_t temperature_1; //0 1 uint16_t temperature_2; //2 3 uint16_t temperature_3; //4 5 uint16_t temperature_4; //6 7 uint16_t temperature_5; //8 9 uint16_t temperature_6; //10 11 uint16_t oil_pressure; //12 13 uint16_t power_load; // 14 15 uint16_t rpm_speed;// 16 17 }temper; uint8_t sendmassive[18]; } bufer; Serial.write( bufer.sendmassive[0]);//------------------------------------------------------------------------------------
В гугле примеров море
union, да, кажется описан правильно.
А вот это -
- оно что, действительно отправляет то что нужно?
Не на чем сейчас проверить, но так, на вид - написано же, что отправляется sendmassive[0], то есть только один байт. Надо посмотреть, какие ещё параметры допустимы при вызове Serial.write( ...... ). Думаю, должна быть функция принимающая указатель на буфер и его длину.
Так, скорей всего: