使用串行监视器 arduino 控制 LED
To control LED using serial monitor arduino
我的项目是通过串行监视器发送"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 的状态在打开和关闭之间切换,或使其处于关闭状态。
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- Arduino:for/while/if在void setup()或void loop()之前?——错误:之前需要不合格
- 控制允许动态运行c++的并发操作数
- 从控制台中删除最后打印的元素
- 是否可以使用if constexpr删除控制流语句
- 人脸跟踪arduino代码的优化
- Arduino Nano:A4988 使用串行输入时通过定时器进行步进控制不稳定
- 为什么我的Arduino代码用于运行蓝牙控制的机器人,障碍物传感器无法正常工作
- Arduino 控制 ledstrip 与新像素卡住
- 如何使用Arduino控制伺服电机
- 使用串行监视器 arduino 控制 LED
- Arduino控制由PC控制
- Arduino以太网访问控制问题
- 用于 2 辆 DC 汽车的 arduino IDE 代码,带有 L298 和超声波和蓝牙控制与安卓
- 接口 C++ 以使用 Arduino 控制电机步进器
- 使用光敏电阻和串行通信控制光 - Arduino
- 什么编程语言最适合通过Arduino上的传感器控制屏幕上的动画?Java语言C++
- Arduino电位器时间控制
- 使用Arduino Mega和Simple-H高压电机屏蔽控制直流电机
- 控制两个直流电机(在arduino上)通过c++源代码