Arduino串口通信---利用串口控制led亮灭

直接上代码(注释已经很详细了):

String val="";//接收串口发送过来的值
int led = 13;//13号引脚为Arduino板载的LED

void setup() {
    
    
  Serial.begin(9600);//设置波特率
  Serial.println("请输入你要发送的数据:");//提示字符
  pinMode(led,OUTPUT);//设置led管脚为输出模式
}

void loop() {
    
    
  while(Serial.available()>0){
    
    //检验在串口缓存区中是否有数据,如果有则返回1,没有就是0.
    val += char(Serial.read());//Serial.read()一位一位的从串口缓存区里读数据
    delay(20);
  }
    //读取电脑传来的数据
     if(val.length()>0){
    
    
        Serial.println("val:"+val);
     
     if(val.compareTo("open")>0){
    
    //如果发送过来的指令是“open”,则打开LED
       digitalWrite(led,HIGH);
       Serial.println("LED已经点亮!");
       delay(1000);//led持续亮1秒
     }
     
     if(val.compareTo("close")>0){
    
    //如果发送过来的指令是“close”,则关闭LED
       digitalWrite(led,LOW);
       Serial.println("LED已经熄灭!");
     }
   }
   val = "";//清空,重新读取
}

要注意的是,在Arduino中,字符串的比较不能直接用==来进行比较,而要用字符串比较函数来比较(这里我用str1.compareTo(str2)函数),如果两字符串相等,则返回的数是大于0的,如果不相等,返回的数小于0,可以自己串口输出验证一下。
在这里插入图片描述
—2022年5月15日15:01:10,更新一下,注意到很早以前写的这个是有点bug,建议大家使用单个字符。
更新的代码:

int led = 13;

char val=' ';//接收串口发送过来的值

void setup() {
    
    
  pinMode(led,OUTPUT);

  Serial.begin(9600);//设置波特率
  Serial.println("请输入你要发送的数据:");//提示字符
}

void loop() {
    
    
   if(Serial.available()>0){
    
    //检验在串口缓存区中是否有数据,如果有则返回1,没有就是0.
    val = char(Serial.read());
    delay(10);
  }

   if(val=='O'){
    
    //
        digitalWrite(led, HIGH);
   }
      if(val=='C'){
    
    //
        digitalWrite(led, LOW);
   }
}

猜你喜欢

转载自blog.csdn.net/Aiden_yan/article/details/117632316