繁体   English   中英

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

[英]Arduino : HC-06 Module receiving wrong data?

我正在使用 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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM