Как отправить число в виде байта?
Я хочу отправить число от 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?
@I Like, 👍0
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);
Предполагая, что дюймы являются переменной типа байта, он просто отправляет необработанный байт.
- Отправка последовательных данных в прерывании
- Почему люди используют 115200 вместо 9600?
- Ошибка 'Serial' was not declared in this scope
- Как получить ненулевой выход из HX711 и ячейки загрузки?
- Serial.availableForWrite против Serial.flush
- Разделенный последовательный поток Arduino, разделенный запятыми
- Как остановить серводвигатель в текущем положении при использовании последовательного порта? Я хочу, чтобы он оставался в одном положении при получении «0».
- Arduino Serial.ReadString() проблема