Серійні дані показують дивні


12

У мене є простий ескіз, який друкує "Hello World" на серіалі, але натомість я отримую купу гнучкості.

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

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

Чому він не друкує "Hello World", як говорить код?


Ви перевірили, чи ініціалізація послідовного порту є правильною та чи збігається з послідовним терміналом ПК? Установка () повинна мати щось на зразок Serial.begin (9600);
Раджендра

@Rajendra цей рядок є прикладом коду, який я дав. Крім того, у мене насправді немає проблеми. Це поширене питання для початківців, і я відповів на питання нижче.
sachleen

Відповіді:


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 не дає вам можливості змінити ці налаштування, але це роблять інші, тому вам потрібно бути впевненим, що всі ці параметри конфігурації однакові.

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


0

Відповідь Сахліна (вище) говорить:

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 і отримати дані, які не містять даних. Ардуїно здається вигадливим ...


0

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

Виберіть правильну плату в IDE Arduino.

Щоб було зрозуміло, потрібно вибрати правильний процесор (напруга / тактова частота) на вкладці Інструменти .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.