我有一个简单的草图,可以在序列号上打印出“ Hello World”,但是却出现了一堆乱码。
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.println("Hello World");
delay(1000);
}
为什么不按代码说明打印“ Hello World”?
我有一个简单的草图,可以在序列号上打印出“ Hello World”,但是却出现了一堆乱码。
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.println("Hello World");
delay(1000);
}
为什么不按代码说明打印“ Hello World”?
Answers:
电路板和终端可能未使用相同的波特率。检查Arduino串行终端的右下角,并确保将其设置为9600。
串行通信通过一次将整个数据流发送一位来进行。这与标准并行端口一次发送一个字节相反。两种设备都需要知道数据的发送速度。此外,两个设备都需要以相同的速度运行。这称为波特率。
波特实际上仅表示每秒脉冲数。在串行通信的上下文中,它表示每秒传输多少位。最常见的值之一是9600,但还有其他常见的值是9600的因数或9的倍数。不过,只要两个设备以相同的速度运行,这实际上并不重要。
如果我向您发送消息的速度比获取消息的速度快,那么您将丢失数据。如果我发送给您的消息比接收到的消息要慢,那么您的胡扯与我发送给您的消息混在一起。
如果查看的文档begin()
,您将看到它可以带有两个参数:
Serial.begin(speed)
Serial.begin(speed, config)
希望您现在了解速度,它是Arduino每秒通信的位数。
第二个参数config
可以让您配置有关串行数据传输的其他内容。这些是数据,奇偶校验和停止位。你会看到它的值喜欢的页面5N1
,6N1
并SERIAL_8N1 (the default)
第一个数字代表多少个数据位。第二个字符告诉您存在哪种奇偶校验位。E
奇偶校验,O
奇校验或N
无校验。第三个数字告诉您多少个停止位。
因此,实际上,对于8N1,每8位“您的”数据将发送10位。1个起始位,8个数据位和1个停止位。
无论如何,双方都需要就此信息以及速度达成共识。Arduino串行终端没有为您提供更改这些设置的选项,但其他选项却可以,因此您需要确保所有这些配置设置都相同。
Wiki上的更多信息:异步串行通信
萨克林的答案(上)说:
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似乎很挑剔...