Передача float в Processing
- Войдите на сайт для отправки комментариев
Пт, 03/11/2017 - 17:38
В Arduino преобразую float в byte и назад
float val = 158.7632040; union u_tag { byte x[4]; float fval; } u; void setup() { Serial.begin(9600); Serial.print("val= "); Serial.println(val, DEC); //float to byte byte *x = (byte *)&val; for (int i=0; i<4; i++) { Serial.println(x[i], DEC); } //byte to float u.x[0] = 97; u.x[1] = 195; u.x[2] = 30; u.x[3] = 67; val = u.fval; Serial.print("value = "); Serial.print(val, DEC); } void loop() { }
Все работает, данные такие
val= 158.7631988525
97
195
30
67
value = 158.7631988525
вставляю данные {97,195,30,67} в Processing и он начинает ругаться на 195.
p.s. Пока писал нашел решение - у Arduino и Processing разные понимания байта. Заменил byte[] outData=new byte[4]; на int [] outData=new byte[4];
float y; int[] outData= {97,195,30,67}; int asInt = (outData[0] & 0xFF) | ((outData[1] & 0xFF) << 8) | ((outData[2] & 0xFF) << 16) | ((outData[3] & 0xFF) << 24); y = Float.intBitsToFloat(asInt); println(y);
В результате получил с округлением 158.7632б.
Все таки что то не так, цифры не совпадают.
float val = 158.7632040
val= 158.7631988525
value = 158.7631988525
В результате 158.7632
В Arduino преобразую float в byte и назад
вставляю данные {97,195,30,67} в Processing и он начинает ругаться на 195.
ну, ругается-то понятно почему, там видимо byte знаковый и 195 не помещается.
Определите нормально, должно работать
и вообще, везде вместо byte поставьте unsigned char
p.s. Пока писал нашел решение - у Arduino и Processing разные понимания байта. Заменил byte[] outData=new byte[4]; на int [] outData=new byte[4];
Вы только никому это решение не показывайте. Обвинят ещё в умышленном нанесении ущерба сельскому хозяйству :)))