本篇文章由 VeriMake 旧版论坛中备份出的原帖的 Markdown 源码生成
原帖标题为:串口通信|通过串口监视器控制 LED 亮灭
原帖作者为:hi(旧版论坛 id = 186)
原帖由作者初次发表于 2021-03-30 14:07:19
串口监视器—从arduino传输串行信息给电脑
在做实验时,我们经常通过硬件的变化(比如led灯闪烁)来判断程序是否正常运行,但如果硬件没有按照正常情况来执行,我们还可以通过串口监视器来观察程序内部的运行情况。串口监控窗口是一个通过串口与arduino微处理器沟通的中介,在使用串口时,必须设置与电脑同等的波特率,我们示例为9600。
示例程序
const byte ledPin=10;
void setup() {
Serial.begin(9600); //初始化串口,一般使用和电脑同等的速率9600bps
Serial.println("hello"); //println区别于print,他会在输出内容后自动加回车符
Serial.print("\tLED pin is:"); //\t是制表符,相当于按一个tab键
Serial.print(ledPin); //输出前边定义的ledPin值
Serial.print("\nBye"); //\n为换行符
}
void loop() {
}
运行结果
连接开发板,编译上传程序成功后,点菜单栏里的工具,选择串口监视器,可看到下图所示。
波特率设置与setup函数里的需要保持一致。
从串口输入信号控制led灯
arduino在微控制器的内存中有划分出缓冲区,用于暂存来自串口的输入数据,通过 available() 函数来检查缓冲区,即arduino可以通过串口来输入数据从而控制一些外围设备。
Serial.available() 检查是否有输入数据
Serial.read() 读取串口值
在这里我们介绍一个新的语句结构 switch....case ,break,这个结构可以很方便的通过对应值来判断执行对应程序,使用方法如下
switch(运算式)
{
case 值1:对应程序1;//值为1执行后面对应程序1
break;//执行到break直接跳出
case 值2:对应程序2;//值为2执行后面对应程序2
break;//执行到break直接跳出
case 值3:对应程序3;//值为3执行后面对应程序3
break;//执行到break直接跳出
......
default:对应程序 //若上述都没有表达式对应的值,则执行default后面的语句
}
接线图
参照led闪烁一章的连接
程序
void setup() {
pinMode(13,OUTPUT); //13引脚设为输出模式
Serial.begin(9600); //设置速率
Serial.print("Successful Connection"); //串口监视打开后出现这行内容说明成功连接
}
void loop() {
char val; //定义一个字符型变量
if(Serial.available()) //如果串口读取到信息
{
val=Serial.read(); //读取串口值存在变量val里
switch(val)
{
case '1': //如果读取到字符1
digitalWrite(13,HIGH); //点亮led
Serial.println("led on"); //串口显示led on
break; //跳出
case '0': //如果读取到字符0
digitalWrite(13,LOW); //led熄灭
Serial.println("led off"); //串口显示led off
break; //跳出
}
}
}
运行结果