побитовые операции на ESP8266(esp01s), не хочет сдвигать байт

Elon Max

✩✩✩✩✩✩✩
11 Ноя 2022
4
0
Получаю данные с датчиков на attiny13, получаю 3 байта, номер датчика, старший бит температуры и младший бит температуры. отправляеться по 433МГц.
ESP принимает эти данные все три байта приходят как положено но при преобразование их в температуру выдает 0. на другой плате Uno без ESP, данные приходят и правильно обрабатываються код тот же самый, температуру показывает правильно.
Если подставлять просто числа не с массива то работает
Код на ESP:
byte data[3];
int32_t a=(data[1]<<8)|data[2];  // и int16_t и int32_t пробовал тоже самое 0
    if (rx.readData(data)) {
      Serial.println(a/16);      // должна вывести температуру в цельсиях
      ///чтото тут делает.....
    }
Вот так работает:
    byte r=233;
    byte t=55;
    uint32_t a=(r<<8)|t;
    if (rx.readData(data)) {
      Serial.println(a,BIN);
      ///чтото тут делает.....
    }
 

poty

★★★★★★✩
19 Фев 2020
3,261
948
Или код приведён не весь или я чего-то не понимаю. Как я интерпретирую "Код на ESP":
1. Создать массив на 3 байта (и, скорее всего, в них окажутся нули).
2. Рассчитать а (из предположения п. 1 оно окажется равным 0).
3. Заполнить 3 байта из п. 1 нужными данными.
4. Вывести значение a (которое 0).

Ноль и выводится.

Во втором случае a вычисляется из ненулевых данных, соответственно, результат и выводится.
 
  • Лойс +1
Реакции: Elon Max

Elon Max

✩✩✩✩✩✩✩
11 Ноя 2022
4
0
@poty, точно спасибо вам, я чтото вообще уже не соображаю, заработался. я обрабатываю данные первее чем они вообще дойдут, пересестили в нижнее условие все заработало спасибо