Помогите плиз разобраться в двух строчках (Serial.read/print)

Тема в разделе "Arduino & Shields", создана пользователем Deniss, 25 май 2015.

  1. Deniss

    Deniss Гик

    Код (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);
      }
    }

     
    Почему в ответе при отправке нуля получаю:
     
  2. DrProg

    DrProg Вечный нерд

    Что подается на вход? Этот код работает только с числами от 0 до 9. В ардуино они попадают в виде символов и чтобы преобразовать их снова в цифры от них отнимают 38, то есть '0'.
     
  3. Deniss

    Deniss Гик

    Подаются цифры, в ответ получаю 2 строчки
    Если отправить 0
    Если 2:
    И т.д.

    Если здесь:
    var = Serial.read() - '0';

    нуль не отнимать
    то выводит то же 2 строчки:
    При замыкании RX и TX на COM порте возвращается то что ушло.
     
  4. DrProg

    DrProg Вечный нерд

    На эту тему была серия у Джереми Блюма, если не ошибаюсь, цифры не помню может дело в них. Надо поэксперементировать как до дома доберусь.

    А вообще печатает правильно же все. Первая цифра из порта, вторая следом лишняя. Вопрос то в чем?
     
  5. Deniss

    Deniss Гик

    В том то и дело как от лишней избавиться не знаю.



    У Джереми все ок а у меня 2 числа назад приходят.
     
  6. Megakoteyka

    Megakoteyka Оракул Модератор

    Код символа '/n' = 0x0A = 10. По выдаче жмете энтер и отправляются 2 символа.
     
  7. DrProg

    DrProg Вечный нерд

    Не печатать вторую строку да и все? Точнее последнюю, если цифр несколько. Если нужна всего 1 цифра, то после первого считывания юзать функцию смыва, она выкинет все остальное.
     
  8. Megakoteyka

    Megakoteyka Оракул Модератор

    Нужно просто поставить условие. Если прочиталось что-то меньше '0' или больше '9' - игнорировать.
     
  9. ANV

    ANV Гуру

    Либо в 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);
        }
      }
    }
     
  10. DrProg

    DrProg Вечный нерд

    До вычита нуля признает чар за цифру?
     
  11. ANV

    ANV Гуру

  12. Deniss

    Deniss Гик

    Всем спасибо все решилось выбором "Не найден конец строки" в сериал монитор.
    Я думал что это за автопрокрутку/вывод информации отвечает...