2017-05-14 46 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);