使用串行监视器 arduino 控制 LED

To control LED using serial monitor arduino

本文关键字:arduino 控制 LED 监视器      更新时间:2023-10-16

我的项目是通过串行监视器发送"1"或"0"来控制LED。我对这个项目的任务是通过串行监视器发送"1"时,Led ON PIN 3 需要每 2000 毫秒打开和关闭一次。然后,当通过串行监视器发送"0"时,LED需要关闭,直到下一个"1"被发送,以便Led ON PIN 3可以再次打开和关闭2000ms。但它不适用于我的代码,谁能告诉我我的代码出了什么问题。下面是我的代码:

char data = 0;            //Variable for storing received data
void setup()
{
    Serial.begin(115200);   //Sets the baud for serial data transmission                               
    pinMode(3, OUTPUT);  //Sets digital pin 3 as output pin
}
void loop()
{
   if(Serial.available()>0 )      // Send data only when you receive data:
   {
      data = Serial.read();        //Read the incoming data send via serial monitor & store into data
    Serial.print(data);          //Print Value inside data in Serial monitor
     Serial.print("n");        

            while(data == '1')          //Do looping so that when '1' send via serial monitor, the LED can blink
            {
                digitalWrite(3, HIGH);   
                delay(2000);
               digitalWrite(3, LOW);
               delay(2000);
            }
      while(data == '0')         //  Checks whether value of data is equal to 0
         digitalWrite(3, LOW);    //If value is 0 then LED turns OFF
}
}

你有几个明显的错误...最主要的是您已将执行锁定在 while 循环中。因此,执行路径到达"while data==",并且当数据等于该值时,它将保留在那里。该值不能更改,因为您只在函数 loop(( 的开头读取数据值。唯一可行的方法是循环由计时器函数提供服务并在两个线程之间共享。

用 ifs 替换你的 whiles,并使用 while (1({loop((;} 运行它;你可能会发现它就会消失。TBH,我会在 while 循环级别添加延迟 2000,并且也只每 2000mS 查询一次串行端口。在飞轮循环中锤击事物是恶业。

更改循环的结构。让循环每 2000 毫秒执行一次。如果有可用的数据可以从串行读取,则读取并解析它以更新1/0状态。根据状态,让 LED 的状态在打开和关闭之间切换,或使其处于关闭状态。