Оказывается, что функция Serial.print () на Arduino преобразует значение в строку и отправляет строку на последовательный порт, поэтому мое смещение бит не сработало.Одним из решений является сбор значений в моем Java-коде в виде строки и преобразование строки в int.
Однако, чтобы избежать шага преобразования значений из строки в int, вы можете использовать функцию serial.write () для отправки значений в последовательный порт.Для этого в эскизе Arduino определите объединение типа int и массива байтов одинакового размера.Затем создайте экземпляр объединения, установите целое число и Serial.write () соответствующий байтовый массив.Соберите байтовый массив в Java-программе и сделайте битовый сдвиг, чтобы получить целое число.
Мой эскиз Arduino кодируется так:
union{
int i;
byte b[2];
}u;
u.i = accel;
Serial.write(u.b, 2);
Мой Java-код для чтения байтового массива ипреобразование его в int выглядит следующим образом:
int n = 2;
byte[] chunk = new byte[n];
input.read(chunk);
short value = 0;
// get 2 bytes, unsigned 0..255
int low = chunk[0] & 0xff;
int high = chunk[1] & 0xff;
value = (short) (high << 8 | low) ;
System.out.println(value);
Я все еще ищу способ получить float или double из Arduino в код Java.Я знаю, что могу написать float или double, заменив int в объединении на double или float, установив double или float и Serial.write () соответствующий байтовый массив.Моя проблема возникает на стороне Java.После того, как я собрал байтовый массив, я не нашел способа корректно сдвинуть данные с плавающей запятой или удвоить.Любая помощь здесь?