Arduino:HC-06模块收到错误的数据?

时间:2017-05-14 14:56:41

标签: android bluetooth arduino

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

3 个答案:

答案 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);