У меня есть простой набросок, который распечатывает «Hello World» в сериале, но вместо этого я получаю кучу толку.
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.println("Hello World");
delay(1000);
}
Почему не печатается «Hello World», как написано в коде?
Ответы:
Плата и терминал, вероятно, не используют одинаковую скорость передачи данных. Проверьте нижний правый угол последовательного терминала Arduino и убедитесь, что он установлен на 9600.
Серийные данные
Последовательная связь работает, посылая весь поток данных по одному биту за раз. Это в отличие от стандартного параллельного порта, который отправляет один байт за раз. Оба устройства должны знать, с какой скоростью отправляются данные. Кроме того, оба устройства должны работать с одинаковой скоростью. Это называется скоростью передачи данных.
Скорость передачи
Бод на самом деле просто означает импульсы в секунду. В контексте последовательной связи это означает, сколько битов передается в секунду. Одним из наиболее распространенных значений является 9600, но есть и другие общие значения, которые являются коэффициентами или кратными 9600. Однако это не имеет значения, если оба устройства работают с одинаковой скоростью.
Если я отправляю вам сообщения быстрее, чем вы, вы теряете данные. Если я отправляю вам сообщения медленнее, чем вы их получаете, вы смешиваетесь с тем, что я вам отправил.
Данные, четность, стоп-биты
Если вы посмотрите на документацию
begin()
, вы увидите, что она может принимать два параметра:Надеюсь, вы понимаете скорость сейчас, это биты в секунду, с которыми Arduino будет общаться.
Второй параметр,
config
позволяет вам настроить некоторые другие параметры последовательной передачи данных. Это данные, четность и стоп-биты. Вы увидите на странице, что она имеет такие значения, как5N1
,6N1
иSERIAL_8N1 (the default)
Первое число представляет, сколько бит данных. Второй символ говорит вам, что это за бит четности.
E
для четного контроля,O
для нечетного контроля илиN
без контроля. Третье число говорит вам, сколько стоп-битов.Так что на самом деле, с 8N1 у нас есть 10 битов, отправляемых на каждые 8 битов «ваших» данных. 1 стартовый бит, 8 бит данных и 1 стоповый бит.
В любом случае, обе стороны должны договориться об этой информации, а также о скорости. Серийный терминал Arduino не дает вам возможности изменять эти настройки, но другие делают это, поэтому вы должны быть уверены, что все эти параметры конфигурации одинаковы.
Больше информации на вики: Асинхронная последовательная связь
источник
Ответ Sachleen (выше) говорит:
Если это число равно 9600, и вы по-прежнему получаете искаженные данные, проверьте вывод, полученный при загрузке кода. Это должно читать что-то вроде:
Эта нижняя строка (из того, что я написал) говорит о том, какова скорость передачи данных вашего устройства по умолчанию. Для меня я изменил
Serial.begin(9600);
->Serial.begin(57600);
и проверил, что нижний правый угол моего последовательного терминала Arduino показывает 57600.После того, как я запустил это, и это сработало, я смог переключиться обратно на 9600 и получить не искаженные данные. Arduino кажется привередливым ...
источник
Я потратил полчаса, пытаясь решить эту проблему, и это был мой Arduino Pro Mini, который имеет напряжение 3,3 В, и я выбрал 5 В в Arduino IDE (на ПК). Серийная печать никогда не работает таким образом, даже с той же скоростью передачи данных.
Выберите правильную доску в Arduino IDE.
Чтобы было понятно, правильный процессор (напряжение / тактовая частота) на вкладке Tools должен быть выбран.
источник