Как отправить число в виде байта?

Я хочу отправить число от 0 до 120 в виде байта через последовательный порт. Я работаю над проектом, который включает отправку показаний ультразвукового датчика через Bluetooth на Android. Я хотел бы отправить все показания в виде байта, и я думаю, что это можно сделать, потому что байт со знаком находится в диапазоне от -128 до 127. Однако байт, полученный в моем приложении для Android, не показывает правильное показание датчика. Вот соответствующий фрагмент кода:

  while (true){
      //ультразвуковой датчик посылает сигнал
      digitalWrite(trigPin, LOW);
      delayMicroseconds(2);
      digitalWrite(trigPin, HIGH);
      delayMicroseconds(10);
      digitalWrite(trigPin, LOW);
      pinMode(echoPin, INPUT);
      duration = pulseIn(echoPin, HIGH);

      cm = (duration / 2) / 29.1;   // Делим на 29,1 или умножаем на 0,0343
      inches = (duration / 2) / 74; // Делим на 74 или умножаем на 0,0135
      // максимальный диапазон составляет 156 дюймов, но наше приложение будет отображать только до 100 дюймов
      inches = min(127, inches);
      Serial.print(inches, BIN);
      delay(50); 

В моем приложении для Android, написанном на Java, я читаю значение следующим образом:

b = (byte) inputStream.read();

Например, если дюймы равны 100 и я отправляю их через последовательный порт, как я могу получить такое же значение в своем приложении для Android?

, 👍0


1 ответ


Лучший ответ:

1

Проблема заключается в BIN в вашем заявлении на печать. Все ВСЕГДА бинарно. BIN означает разбить этот двоичный файл на цифры ascii 0 и 1. Поэтому, если вы отправляете

Serial.print(21, BIN);

затем функция печати принимает 21 в качестве двоичного числа, 00010101, а затем отправляет эти двоичные цифры в формате ASCII. Таким образом, по проводу передается 8 отдельных байтов, это 48, 48, 48, 49, 48, 49, 48, 49, поскольку 48 и 49 - это коды ascii для 0 и 1.

То, что вы хотите сделать, это просто отправить необработанный байт. Поэтому вместо этого используйте Serial.write . Функции печати преобразуют вещи в представления ascii, но функция записи просто отправляет необработанные байты. Итак, если вы напишете:

Serial.write(inches);

Предполагая, что дюймы являются переменной типа байта, он просто отправляет необработанный байт.

,