Серийный номер разбит на две более короткие строки
Я пытаюсь выполнить последовательное чтение:
if (Serial.available() > 0) {
int inputValue = Serial.read();
Serial.println();
Serial.println("I got this:");
Serial.print(inputValue, BIN);
}
Однако кажется, что я всегда получаю сначала 6 бит, а затем 4 бита. Я действительно смущен. Я использовал другую плату, чтобы убедиться, что проблема не только в плате. Может быть, это серийный монитор, который я использую? Я использую серийный номер Arduino. Это пример вывода:
21:31:02.021 ->
21:31:02.021 -> I got this:
21:31:02.021 -> 110101
21:31:02.021 -> I got this:
21:31:02.021 -> 1010
Кто-нибудь может пролить свет на то, что здесь происходит?
@Sarge324, 👍1
Обсуждение1 ответ
Я предполагаю, что вы отправляете 5
и устанавливаете конец строки только на новую строку. Тогда все правильно и как положено. Вы видите 2 байта, которые передаются. Serial.print()
удалит начальные нули байта, поэтому все остальные цифры перед этим просто равны нулю.
Первый байт — это символ 5
, закодированный в ASCII (здесь 53 — это десятичное представление значения ASCII). Второй байт — это символ новой строки \n
, который отмечает конец строки или конец сообщения данных (в зависимости от интерпретации данных). Если вы не хотите отправлять символ новой строки, выберите «Ничего» для окончания строки (моя среда разработки Arduino на немецком языке, поэтому я не знаю, какой именно термин здесь используется в английской версии, но вам нужно установить его за то, что не используется окончание строки).
Похоже, что в настоящее время вы этого не знаете: когда вы записываете число в последовательный монитор, вы не отправляете прямое двоичное значение этого числа. Вы отправляете ASCII-представление отдельных цифр. ASCII — это система, в которой значения байта представляют символ. Это включает в себя десятичные цифры, алфавит и некоторые специальные символы. Таким образом, когда вы вводите «255», вы отправляете не 0b11111111
(1 байт со всеми установленными битами --> десятичное число 255), вы отправляете 3 байта со значением байта ASCII для символов 2
, 5
и 5
. Вы можете прочитать значения байтов для всех символов в таблицах, просто погуглив «ASCII». и просмотр найденных изображений.
- Отправка последовательных данных в прерывании
- Почему люди используют 115200 вместо 9600?
- Ошибка 'Serial' was not declared in this scope
- Как получить ненулевой выход из HX711 и ячейки загрузки?
- Serial.availableForWrite против Serial.flush
- Разделенный последовательный поток Arduino, разделенный запятыми
- Как остановить серводвигатель в текущем положении при использовании последовательного порта? Я хочу, чтобы он оставался в одном положении при получении «0».
- Arduino Serial.ReadString() проблема
вы путаете то что получаете с тем что печатаете, @jsotola