Серийные данные, показывающие странные

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

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

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

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

9 голосов | спросил sachleen 17 FebruaryEurope/MoscowbMon, 17 Feb 2014 06:24:00 +0400000000amMon, 17 Feb 2014 06:24:00 +040014 2014, 06:24:00

3 ответа


7

Плата и терминал, вероятно, не используют одну и ту же скорость передачи. Проверьте нижний правый угол последовательного терминала 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 Serial Terminal не дает вам возможность изменять эти настройки, но другие делают это, поэтому вам нужно быть уверенным, что все эти параметры конфигурации одинаковы.

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

ответил sachleen 17 FebruaryEurope/MoscowbMon, 17 Feb 2014 06:24:00 +0400000000amMon, 17 Feb 2014 06:24:00 +040014 2014, 06:24:00
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 Serial Terminal читается 57600.

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

ответил John Doe 11 J000000Wednesday18 2018, 04:25:08
-1

Я был на полчаса, пытаясь решить это, и был моим Arduino pro mini 3.3v , и я выбираю 5v на Arduino IDE (на ПК). Серийная печать никогда не работает так, даже при той же скорости передачи в бодах.

ВЫБЕРИТЕ ПРАВИЛЬНЫЙ СОВЕТ на arduino ide! :)

ответил tmaster 2 PMpSun, 02 Apr 2017 12:33:56 +030033Sunday 2017, 12:33:56

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132