Серийные данные отображаются странно

12

У меня есть простой набросок, который распечатывает «Hello World» в сериале, но вместо этого я получаю кучу толку.

void setup() {
    Serial.begin(9600);
}

void loop() {
    Serial.println("Hello World");
    delay(1000);
}

Почему не печатается «Hello World», как написано в коде?

sachleen
источник
Вы проверили, правильно ли инициализируется последовательный порт и совпадает ли он с последовательным терминалом ПК? Настройка () должна иметь что-то вроде Serial.begin (9600);
Раджендра
@ Rajendra эта строка в примере кода, который я дал. Кроме того, у меня на самом деле нет проблемы. Это общая проблема для начинающих, и я ответил на вопрос ниже.
Сахлин

Ответы:

8

Плата и терминал, вероятно, не используют одинаковую скорость передачи данных. Проверьте нижний правый угол последовательного терминала Arduino и убедитесь, что он установлен на 9600.

Серийные данные

Последовательная связь работает, посылая весь поток данных по одному биту за раз. Это в отличие от стандартного параллельного порта, который отправляет один байт за раз. Оба устройства должны знать, с какой скоростью отправляются данные. Кроме того, оба устройства должны работать с одинаковой скоростью. Это называется скоростью передачи данных.

Скорость передачи

Бод на самом деле просто означает импульсы в секунду. В контексте последовательной связи это означает, сколько битов передается в секунду. Одним из наиболее распространенных значений является 9600, но есть и другие общие значения, которые являются коэффициентами или кратными 9600. Однако это не имеет значения, если оба устройства работают с одинаковой скоростью.

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

Данные, четность, стоп-биты

Если вы посмотрите на документацию begin(), вы увидите, что она может принимать два параметра:

Serial.begin(speed)
Serial.begin(speed, config)

Надеюсь, вы понимаете скорость сейчас, это биты в секунду, с которыми Arduino будет общаться.

Второй параметр, configпозволяет вам настроить некоторые другие параметры последовательной передачи данных. Это данные, четность и стоп-биты. Вы увидите на странице, что она имеет такие значения, как 5N1, 6N1иSERIAL_8N1 (the default)

Первое число представляет, сколько бит данных. Второй символ говорит вам, что это за бит четности. Eдля четного контроля, Oдля нечетного контроля или Nбез контроля. Третье число говорит вам, сколько стоп-битов.

Так что на самом деле, с 8N1 у нас есть 10 битов, отправляемых на каждые 8 ​​битов «ваших» данных. 1 стартовый бит, 8 бит данных и 1 стоповый бит.

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

Больше информации на вики: Асинхронная последовательная связь

sachleen
источник
0

Ответ Sachleen (выше) говорит:

The board and terminal are probably not using the same baud rate. 
Check the bottom right corner of the Arduino Serial Terminal
and make sure it is set to 9600.

Если это число равно 9600, и вы по-прежнему получаете искаженные данные, проверьте вывод, полученный при загрузке кода. Это должно читать что-то вроде:

Sketch uses 2754 bytes (8%) of program storage space. Maximum is 30720 bytes.
Global variables use 195 bytes (9%) of dynamic memory, leaving 1853 bytes for local variables. Maximum is 2048 bytes.
C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avrdude -CC:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf -v -patmega328p -carduino -PCOM5 -b57600 -D -Uflash:w:C:\Users\Owner\AppData\Local\Temp\arduino_build_457862/LockCode.ino.hex:i 

avrdude: Version 6.3, compiled on Jan 17 2017 at 12:00:53
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2014 Joerg Wunsch

         System wide configuration file is "C:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf"

         Using Port                    : COM5
         Using Programmer              : arduino
         Overriding Baud Rate          : 57600

Эта нижняя строка (из того, что я написал) говорит о том, какова скорость передачи данных вашего устройства по умолчанию. Для меня я изменил Serial.begin(9600);-> Serial.begin(57600);и проверил, что нижний правый угол моего последовательного терминала Arduino показывает 57600.

После того, как я запустил это, и это сработало, я смог переключиться обратно на 9600 и получить не искаженные данные. Arduino кажется привередливым ...

Джон Доу
источник
0

Я потратил полчаса, пытаясь решить эту проблему, и это был мой Arduino Pro Mini, который имеет напряжение 3,3 В, и я выбрал 5 В в Arduino IDE (на ПК). Серийная печать никогда не работает таким образом, даже с той же скоростью передачи данных.

Выберите правильную доску в Arduino IDE.

Чтобы было понятно, правильный процессор (напряжение / тактовая частота) на вкладке Tools должен быть выбран.

tmaster
источник