Передача данных из монитора порта

Niktovka
Offline
Зарегистрирован: 22.08.2019

Привет Всем! У меня есть вопрос, помогите. Я изучаю ардуино по книге Бокселла "ИЗУЧАЕМ ARDUINO".

Я дошёл до места, где изучается передача данных из монитора порта в ардуинку. Там есть пример:

Цитата: "Для исследования процесса передачи и приема данных посредством монитора порта рассмотрим следующий скетч. Он принимает одноразрядное число от пользователя, умножает его на 2 и отправляет результат в монитор порта."

Далее даётся скетч:

// Проект 13 - Умножение числа на два
int number;
void setup()
{
Serial.begin(9600);
}
void loop()
{
number = 0; // обнулить переменную, подготовив
// ее к приему нового числа
Serial.flush(); // очистить буфер порта от "мусора" перед ожиданием
while (Serial.available() == 0)
{
// ничего не делать, пока что-то не появится в буфере порта
}
while (Serial.available() > 0)
{
number = Serial.read() - '0';
// прочитать цифру из буфера порта,
// вычесть из ASCII-кода цифры
// код символа '0', чтобы получить число
}
// Вывести число!
Serial.print("You entered: ");
Serial.println(number);
Serial.print(number);
Serial.print(" multiplied by two is ");
number = number * 2;
Serial.println(number);
}

По книге, я должен получать следующее при вводе цифры:

"You entered: 8

8 multiplied by two is: 16"

На деле же у меня выскакивает 2 строки (например при вводе 8-ки):

You entered: 8
8 multiplied by two is 16
You entered: -38
-38 multiplied by two is -76

Вот эта вторая строчка выпрыгивает всегда, и при вводе любой цифры там именно -38 и -76.
Почему так происходит?
Дальше я хотел вообще сначала понять что за функция Serial.available (). Я не совсем понял, но она типа возвращает количество байт в буфере монитора порта (это так?). На сайте https://doc.arduino.ua/ru/prog/Serial/Available есть примет скетча:
 
int incomingByte = 0;   // для данных, поступающих через последовательный порт
 
void setup() {
        Serial.begin(9600);     // открываем последовательный порт 
                                //и задаем скорость обмена 9600 бод
}
 
void loop() {
 
        // отправляем данные только после их получения:
        if (Serial.available() > 0) {
                // считываем входящий байт:
                incomingByte = Serial.read();
 
                // показываем, что именно мы получили:
                Serial.print("I received: ");
                Serial.println(incomingByte, DEC);
        }
}

Вводя цифру я должен получать DEC обозначение введённого символа. Типа при вводе 1 я должен увидеть "I received: 49". Но опять же мне выскакивает две строки:

"I received: 49

I received: 10"

И на второй всегда 10-ка. Что опять не так?

 
 
Niktovka
Offline
Зарегистрирован: 22.08.2019

Niktovka пишет:

На деле же у меня выскакивает 2 строки (например при вводе 8-ки):

You entered: 8
8 multiplied by two is 16
You entered: -38
-38 multiplied by two is -76

Вот эта вторая строчка выпрыгивает всегда, и при вводе любой цифры там именно -38 и -76.
 
Ошибка - не две строки, а 4
kalapanga
Offline
Зарегистрирован: 23.10.2016

В правом нижнем углу монитора порта настройка - как завершать строку. Можно ничего не добавлять, можно добавлять символы перевода строки и т.п. Вот на них скетч и реагирует. 

Niktovka
Offline
Зарегистрирован: 22.08.2019

kalapanga пишет:

В правом нижнем углу монитора порта настройка - как завершать строку. Можно ничего не добавлять, можно добавлять символы перевода строки и т.п. Вот на них скетч и реагирует. 

 

Спасибо, всё так просто было