Ошибка в скетче

Technofox

✩✩✩✩✩✩✩
25 Июн 2020
20
1
Всем доброго дня.

Смотрю уроки по Arduino и пытался выполнить один скетч.

Необходимо чтобы порт принимал данные в целочисленном формате и выдавал то же значение.
Всё сделал как в инструкции, перепроверил, но всё равно после нужной цифры выдаёт «-38». То есть я ввожу, например, 5, а он выдаёт 5 и в следующей строке -38.
В чём может быть проблема? Буду признателен за совет.

Скриншоты прилагаю.

Это мой скетч и результат.
Ошибка 1.jpg

Это оригинальный скетч из уроков.
Ошибка 2.jpg
 

Вложения

Technofox

✩✩✩✩✩✩✩
25 Июн 2020
20
1
Я по этому видео и делал. Скриншот скетча образца именно из него, мой - идентичен.
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,263
1,302
Москва
Там есть объяснение почему и как. А теперь если посмотреть в монитор порта, то там рядом со скоростью есть еще значение NL & CR, нет конца строки и еще что то. это тоже может участвовать в обороте данных

доп . материал https://www.arduino.cc/en/Reference/parseInt

и еще , если надо работать с символами лучше использовать беззнаковые типы данных: byte, uint8_t
 
Изменено:
  • Лойс +1
Реакции: MrBob

Старик Похабыч

★★★★★★★
14 Авг 2019
4,263
1,302
Москва
Влияет, как символы считываются. Даже тут у кого то было. Т.е. если передать символ 5, то в ком порт постучиться 3 символа
 

kalobyte

★★★✩✩✩✩
1 Янв 2020
724
148
Осталось со времён принтеров, которые были похожи на пишущую машинку.
Прижилось.
эээ... вообще-то это управляющие символы и они до сих пор используются любым текстовым редактором как раз для перевода курсора на новую строку
еще символ табуляции есть из популярных

для кода смвол \n может быть полезен как признак завершения ввода команды с терминала
так что еще как влияет
 

Эдуард Анисимов

★★★★★★✩
23 Сен 2019
2,410
976
58
Марий-Эл
\n - перевод строки
\t - возврат каретки
Если их передать терминалу он Переведёт строку и Поставит курсор на начало новой строки. Если настроен на приём обоих символов.
Если он настроен на приём только Перевода строки, то при получении этой последовательности, он перевод каретки и возврат строки сделает два раза.
Это управляющие символы. На данные они не влияют. Ты их можешь и не передавать.
В памяти строковые константы должны заканчиваються \0. И только им.
При выводе, когда не указывается длина строки, она обязательно должна заканчиваться \0 потому что функция вывода ориентируется на него.
Если вы выводите строку не указав количества выводимых символов и строка не имеет завершающего символа \0 функция вывода выведет нужную инфу и весь мусор из памяти, пока не встретит где нибудь на задворках, в мусоре, символ завершения строки.

Это АКСИОМА.


Люди не любящие читать очень часто напарываются на это, а потом удивляются почему у них выводится непонятно что.
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,263
1,302
Москва
Ну вот. Теперь смотри. человек считывает int , а это 2 байта, т.е. что получается ? берет 3 симвлоа, может 2, не знаю что там стоит, может и 1 , Вычитает из них 48, и выводит результат - число. И получает отрицательное значение. В ДАННОМ случае влияет.
Если делат все по правилам, но конечно не должно, но имеем конкретный случай.

Что надо сделать.
1) Можно попробовать убрать конец и перевод строки
2) Посмотреть кол-во символов готовых для чтения в ком порте
3) Как я уже писал сменить тип на беззнаковый.
 

Эдуард Анисимов

★★★★★★✩
23 Сен 2019
2,410
976
58
Марий-Эл
В консоль передаётся ТОЛЬКО СИМВОЛ ТИПА CHAR в ASCII формате и принимается только CHAR. Если хотите видеть не кракозяблы, а вменяемую информацию привычнуб для глаза человека.
Если хотите вывести Целое, Дробное или что то другое, нужно привести его к типу char.
Если хотите вывести целое приемлемое для глаза человека, например 1425, то в консоль вы должны вывести 0x31, 0x34, 0x32, 0x35.
Так же с приёмом, если вы в консоли наберёте то же самое число, то вам придёт 4 байта.

Всё остальное делается функциями. Если вы не смогли воспользоваться функцией правильно или функция написана криво, вы и получаете глюки.

Просто запомните, Если работаете с консолью, передача идёт только байтовая.
Для глаза человека число нужно перевести в char формат и вывести.
Если передаёте от компа к компу, передаёте как массив. Не преобразуя в ASCII формат.
 
Изменено:

Technofox

✩✩✩✩✩✩✩
25 Июн 2020
20
1
Всем спасибо за помощь.
Просто поставил "Нет конца строки", и всё заработало.