
void setup() { // put your setup code here, to run once: Serial.begin(9600);//初始化串口 } void loop() { // put your main code here, to run repeatedly: if(Serial.available()0)//如果缓冲区有数据则读取并输出如果没有数据则跳过或等待读取 { char chSerial.read();//读取输入的信息并赋值给ch Serial.print(ch);//输出信息 delay(1000);//延迟1S } }运行结果读者可以思考为何上述代码没有换行代码而在监视器上输出的数据会自动换行这段代码本身并没有实现换行功能。你观察到的“换行”效果完全来自于串口监视器发送数据时的附加设置而不是Serial.print()本身的作用。1. 串口监视器的“新行”发送设置根本原因在 Arduino IDE 的串口监视器右下角有一个下拉选项通常默认为“新行”或“Both NL CR”。当你在输入框中输入字符并点击“发送”时监视器会自动在你输入的字符末尾追加一个换行符\n即 ASCII 码 10或回车换行符\r\n。你的代码循环读取缓冲区当读到这个自动附加的换行符时Serial.print(ch)会把这个换行符原样输出到屏幕上。屏幕收到换行符后光标就会移动到下一行。所以你看到的下一次输出出现在新行实际上是把换行符本身打印出来了。2. 代码实际的执行效果印证如果你把串口监视器的右下角选项改为“无换行”然后再发送字符例如发送A你的代码会输出A。因为缓冲区没有换行符ch永远不会等于\n所以屏幕不会换行。下一次发送B时输出会紧跟在A后面变成AB中间只有delay(1000)的停顿没有换行。另外可能已经注意到当进行串口通信时Arduino控制器上标有 RX和 TX的两个LED灯会闪烁提示。当接收数据时RX 灯会点亮当发送数据时TX灯会点亮。利用串口通信功能可以使用计算机控制 Arduino来执行特定的操作。