Код (Text): int var = 0; void setup() { Serial.begin(9600); } void loop() { if (Serial.available() > 0) { var = Serial.read() - '0'; Serial.print("received: "); Serial.println(var); } } Почему в ответе при отправке нуля получаю:
Что подается на вход? Этот код работает только с числами от 0 до 9. В ардуино они попадают в виде символов и чтобы преобразовать их снова в цифры от них отнимают 38, то есть '0'.
Подаются цифры, в ответ получаю 2 строчки Если отправить 0 Если 2: И т.д. Если здесь: var = Serial.read() - '0'; нуль не отнимать то выводит то же 2 строчки: При замыкании RX и TX на COM порте возвращается то что ушло.
На эту тему была серия у Джереми Блюма, если не ошибаюсь, цифры не помню может дело в них. Надо поэксперементировать как до дома доберусь. А вообще печатает правильно же все. Первая цифра из порта, вторая следом лишняя. Вопрос то в чем?
Не печатать вторую строку да и все? Точнее последнюю, если цифр несколько. Если нужна всего 1 цифра, то после первого считывания юзать функцию смыва, она выкинет все остальное.
Либо в serial monitor выбрать чтобы строка оканчивалась без CR/LF, тогда лишнее посылаться не будет. Либо так: Код (Text): void loop() { if (Serial.available() > 0) { var = Serial.read(); if (isDigit(var)) { var -= '0'; Serial.print("received: "); Serial.println(var); } } }
Всем спасибо все решилось выбором "Не найден конец строки" в сериал монитор. Я думал что это за автопрокрутку/вывод информации отвечает...