本篇文章由 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;                           //跳出
    }
  }
}
运行结果





