Arduino : HC-06 模块接收错误数据



我正在使用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 ,我尝试按照许多论坛和答案的建议更改波特率, 还是没有运气。

尝试在读取数据后放置延迟,以便给 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);
}

我认为主要问题是您在设置中打印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);
        }
    }
}

我通过将BT模块的波特率设置为38400来解决此问题,这取决于您使用的模块的类型,有些可能以不同的波特率工作。

BTSerial.begin(38400);

最新更新