2017-05-14 44 views
2

我正在使用HC-06蓝牙模块来控制我的Arduino Uno,我想实现一个简单的程序,可以打开和关闭一个LED。Arduino:HC-06模块接收到错误的数据?

码 -

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它们显示在串口监视器为“Y”和LED做没有打开可能是因为数据不匹配1或2,我试图改变波特率由许多论坛和答案建议,仍然没有运气。

回答

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); 
     } 
    } 
} 
+0

尝试这种代码,不工作:/,相同的结果。谢谢 –

+0

@AnjukaKoralage什么波特率你的计算机上设置的HC06模块串行输出无所谓。你必须在Arduino的设置完全一样的波特率为对HC06(即一个由AT命令集) – KIIV

0

我由BT模块的波特率设置为38400解决了这个,这取决于你所使用的模块的类型,有些人可能在不同的波特率工作。

BTSerial.begin(38400);