arduino无法正确运行无反应求帮助
int val;//接收串口发送过来的值
int led = 13;//13号引脚为Arduino板载的LED
void setup() {
Serial.begin(9600);//设置波特率
Serial.println("请输入你要发送的数据:");//提示字符
pinMode(led,OUTPUT);//设置led管脚为输出模式
}
void loop() {
//读取电脑传来的数据
val=Serial.read();//读取PC 机发送给Arduino 的指令或字符,并将该指令或字符赋给val。
if(val=="a"){//如果发送过来的指令是“open”,则打开LED
Serial.println("扫描中"+val);
digitalWrite(led,HIGH);
Serial.println("LED已经点亮!");
//led持续亮1秒
}
if(val=='b'){//如果发送过来的指令是“close”,则关闭LED
digitalWrite(led,LOW);
Serial.println("LED已经熄灭!");
}
if(val=='R'){//判断接收到的指令或字符是否是“R”。//如果接收到的是“R”字符
digitalWrite(led,HIGH);//点亮数字13 口LED。
delay(500);
digitalWrite(led,LOW);//熄灭数字13 口LED
delay(500);
Serial.println("Hello World!");//显示“Hello World!”字符串
}
//清空,重新读取
}
你的Arduino代码有几个小错误需要修正。首先,Serial.read()
函数返回的是一个字节(int
类型),而不是一个字符串。你不能直接将其与字符串比较,例如if(val=="a")
这样的代码是不对的,你需要与字符进行比较,如if(val=='a')
。
其次,你需要确保Serial.read()
真正读取到了数据。如果没有可用数据,Serial.read()
会返回-1。因此,你需要在读取数据之前检查Serial.available()
,这个函数会返回可用数据的字节数。
以下是修改后的代码:
int val;
int led = 13;
void setup() {
Serial.begin(9600);
Serial.println("请输入你要发送的数据:");
pinMode(led,OUTPUT);
}
void loop() {
if (Serial.available() > 0) {
val = Serial.read();
if (val == 'a') {
digitalWrite(led, HIGH);
Serial.println("LED已经点亮!");
}
if (val == 'b') {
digitalWrite(led, LOW);
Serial.println("LED已经熄灭!");
}
if (val == 'R') {
digitalWrite(led, HIGH);
delay(500);
digitalWrite(led, LOW);
delay(500);
Serial.println("Hello World!");
}
}
}
这个修正版本的代码应该能够正常工作。如果你的Arduino仍然没有反应,那么可能是你的硬件连接有问题,或者你的Arduino IDE环境有问题。你需要检查你的硬件和软件设置,确保一切正常。
考虑到之前那篇博客写的太简略,也只给了一个最终代码,比较容易让人看不懂。本篇主要写一些不同功能函数的代码讲解,要看整体部分的请前往我的另一篇博客—基于Arduino(MEGA2560)的智能物流小车项目