【问题标题】:Arduino : HC-06 Module receiving wrong data?Arduino:HC-06 模块接收错误数据?
【发布时间】:2017-05-14 14:56:41
【问题描述】:

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

【问题讨论】:

    标签: android bluetooth arduino


    【解决方案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);
    
    }
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 试过这段代码,不起作用:/,同样的结果。谢谢
      • @AnjukaKoralage 你在电脑上设置的波特率对HC06模块串行输出没有影响。您必须在 Arduino 上设置与 HC06 上完全相同的波特率(通过 AT 命令设置)
      【解决方案3】:

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

      BTSerial.begin(38400);
      

      【讨论】:

        猜你喜欢
        • 2016-04-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-13
        • 2013-03-08
        • 1970-01-01
        相关资源
        最近更新 更多