我正在使用HC-06蓝牙模块来控制我的Arduino Uno,我想实现一个可以打开和关闭LED的简单程序。
代码 -
char val;
void setup()
{
pinMode(13, OUTPUT);
Serial.begin(9600);
Serial.println("Ready");
}
void loop()
{
if(Serial.available()){
val = Serial.read();
Serial.println(val);
// digitalWrite(13,HIGH);
}
if (val=='1'){
digitalWrite(13,HIGH);
}
else if(val=='2'){
digitalWrite(13,LOW);
}
delay(100);
}
我使用不同的应用程序从我的手机向模块发送数据,但是当我发送1和2时,它们在串行监视器中显示为“ÿ”并且LED未打开可能是因为数据不匹配1或2,我尝试按照许多论坛和答案的建议改变波特率,但仍然没有运气。
答案 0 :(得分:1)
在读取数据后尝试设置延迟,以便给时间arduino处理信息量(可能只有10毫秒):
void setup()
{
pinMode(13, OUTPUT);
Serial.begin(9600);
Serial.println("Ready");
}
void loop()
{
if(Serial.available()){
val = Serial.read();
Serial.println(val);
delay(10);
// digitalWrite(13,HIGH);
}
if (val=='1'){
digitalWrite(13,HIGH);
}
else if(val=='2'){
digitalWrite(13,LOW);
}
delay(100);
}
答案 1 :(得分:0)
我认为主要问题是您在设置中打印Ready
。由于这个原因,Serial.available()
函数已经有了一些价值。在下面的代码中,我等待串行线路上的输入。一旦串口有一些输入,while循环就会中断,代码就会继续。从输入中获取第一个字符后,我只是刷新任何不必要的内容(如果可用)。如果这没有解决您的问题,请告诉我。
char val;
void setup() {
pinMode(13, OUTPUT);
Serial.begin(9600);
}
void loop() {
while(Serial.available() <= 0);
if(Serial.available()) {
val = Serial.read();
//Flush any excess input
while(Serial.available()) {
Serial.read();
}
Serial.println(val);
if (val=='1'){
digitalWrite(13,HIGH);
}
else if(val=='2'){
digitalWrite(13,LOW);
}
}
}
答案 2 :(得分:0)
我通过将BT模块的波特率设置为38400来解决这个问题,这取决于您使用的模块的类型,有些可能在不同的波特率下工作。
BTSerial.begin(38400);