HC-12 передача структуры

Casper17
Offline
Зарегистрирован: 21.06.2013

Помогите пожалуйста разобраться с передачей структуры по uart(радиомодули HC-12).

Есть структура, ее размер через sizeof равен 5 байт.

typedef struct {   
   uint8_t idTo; //0x01
   uint8_t idFrom; //0x02
   uint8_t nameSensor; // 0x03
   int val; //29 
}Data;

Data sens;

Отправляю структуру радиомодулю Serial1.write((char*)&sens; И в com порт себе. По com порту получаю 4 байта 0x01 0x02 0x03 0x1D. А на приемнике в цикле по идее надо получать 5 байт так как sizeof показал размер 5! А приходит 0x01 0x02 0x03 0x1D 0xFF. 

for(int i = 0; i < 5; i++)
        {
          buf[i] = Serial1.read(); 
          Serial.print(buf[i]);   
        }
        memcpy(&sens,buf,5);

И число уже не 29 а -227. Но если принять не 5 а 4 байта то всё норм. Или отправлять большее число. Как сделать так, чтобы отправлялось 2 байта int val и если число маленькое то дополнялось нулями! 0x01 0x02 0x03 0x1D 0x00

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

int надо разложить на два байта.

Casper17
Offline
Зарегистрирован: 21.06.2013

Yarik.Yar пишет:

int надо разложить на два байта.

Вместо int val сделать два поля uint8_t val_L и uint8_t val_H

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Casper17 пишет:

Отправляю структуру радиомодулю Serial1.write((char*)&sens; 

А Вы не могли бы нормально привести кусок кода, которым отправляете? То, что здесь написано - кодом не является.