Я делаю приложение, которое отправляет значения с плавающей запятой из arduino (используя Xbee для передачи) в приложение на Java (используя Xbee для получения). Проблема в том, что когда я получаю данные на Java, я не могу преобразовать их в исходное число с плавающей запятой, которое я сохранил в пакете xbee.
Это то, что у меня есть,
Ардуино:
uint8_t* data;
float value = (voltage*100)/5;
data = (uint8_t*)(&value);
for(int i = 0; i<sizeof(data); i++) Serial.println(data[i]):
Serial.println(*((float*)(data)));
Здесь я беру значение с плавающей запятой и сохраняю его в массиве данных в виде байтов. Например, для значения 22,66 то, что я получаю в первой печати, — это значения 0 и 72 (размер данных равен 2 после сохранения значения с плавающей запятой). Второй отпечаток получает 22,66. Таким образом, кажется, что значение хранится правильно.
После этого я отправляю данные на Java в пакете Xbee и получаю такие данные на Java:
XBeeResponse response = xbee.getResponse(2000);
int[] data = response.getProcessedPacketBytes();
System.out.println(data[7] + " " + data[8]); //these positions contain the values stored in arduino -> data[7] = 0 and data[8] = 72)
Я хотел бы знать, как получить значение 22,66 в java из позиций данных [7] и данных [8]. Я пробовал некоторые вещи, такие как:
int value = (data[7]) | (data[8]<<8);
float valuef = Float.intBitsToFloat(value);
Но это не сработало.
Кто-нибудь знает, как я мог это сделать?
Спасибо!
PS: если это поможет, я использую следующие библиотеки xbee в java и arduino: https://github.com/andrewrapp/xbee-api https://github.com/andrewrapp/xbee-arduino< /а>
sizeof(value)
, который будет 4 байта. - person tomlogic   schedule 06.07.2016