2012-02-22 81 views
1

我試圖讓我的Arduino UNO板與BlueSmirf Gold一起工作(http://www.sparkfun.com/products/10268)。檢查我的Arduino板上的藍牙模塊是否工作

我有線它作爲各種教程解釋(例如這裏:http://www.instructables.com/id/how-to-Control-arduino-by-bluetooth-from-PC-pock/

我設置波特率爲9600的解釋在這裏:http://forum.sparkfun.com/viewtopic.php?p=94557

我管理連接到它使用默認Arduino串行終端,ZTerm和我的手機(使用Amarino)。在任何情況下,藍牙調制解調器上的綠燈亮起,直到看起來不錯。

主要問題是我的調制解調器似乎無法發送/接收任何東西(唯一一次我有任何響應是當我設置波特率爲9600)。

例如,我有這樣的代碼(這裏簡化,但其主要思想是存在):

int out_pin = 2; 

String readLine() { 
    char command[100]; 
    int i = 0; 

    if(Serial.available()){ 

    delay(100); 
    while(Serial.available() > 0 && i< 99) { 
     command[i++] = Serial.read(); 
    } 

    command[i++]='\0'; 
    Serial.flush(); 
    } 

    Serial.print("command: "); 
    Serial.println(command); 
    return (String) command; 
} 

void menu() { 
    if (Serial.available() <= 0) { 
    return; 
    } 

    String command = readLine(); 

    // Do thing based on the command 
} 

void setup() { 
    pinMode(out_pin, OUTPUT); 
    Serial.begin(9600); 
} 

void loop() { 
menu(); 
} 

從邏輯上講,當我通過終端發送的東西,我應該拿回來(這是什麼情況當使用USB串口時)。 當我通過藍牙連接到電路板時,它只是保持沉默。

我也試過這段代碼:使用USB串口時

void setup() { 
    Serial.begin(9600); 
} 

void loop() { 
    Serial.println("Spam ..."); 
} 

工作正常,但使用藍牙時將其連接到我的主板我什麼也沒得到。

有了這兩個代碼,我也嘗試使用Amarino中的監視器工具將消息發送到板,但它似乎從來沒有得到它。我已經嘗試了各種其他的東西: - 沒有USB序列可用(我通過USB爲Arduino開發板供電,但使用了插頭牆上的適配器,稍後我會嘗試使用9V電池,現在可用) - 在調制解調器中不要連接CTS-1到RTS-0(某些教程指出連接它們,其他則不要。因爲我懷疑我嘗試了兩種解決方案)。

我有過的時候,唯一一次看起來像一個溝通是與此設置:

  • 的Arduino - 手機通過藍牙連接
  • 的Amarino監測是對
  • 的Arduino - 計算機通過連接USB序列號

將新代碼上傳到我的主板時,它的某些部分顯示在手機的監視工具上。 它發生了一兩次,現在我無法再現它。

我很確定我在某處做了什麼錯誤(至少這似乎是最合理的解釋),但我也想知道它是不是藍牙模型的問題(我的意思是,即使是示例教程不起作用)。

所以問題是:

  • 是不是我錯過了/忘了做,可以幫助我解決這個問題 ?
  • 如果沒有:是否有一個簡單的方法來檢查我的藍牙調制解調器 工作正常嗎?

感謝, 文森特

回答

0

我還沒有對第二個問題的答案(「有沒有一個簡單的方法來檢查我的藍牙調制解調器正常工作?」),但我終於是能夠從藍牙調制解調器發送/接收消息。

正如我猜測(至少我是怎麼理解的),這是同一塊電路板上兩個串行(藍牙和USB)的問題。 爲了解決這個問題,我已經插入的BT TX-1上針數字5,RX-0上的數字3和用下面的代碼(基於SoftwareSerial教程):

#include <SoftwareSerial.h> 
SoftwareSerial bluetooth(5, 3); 

void setup() 
{ 
    // Start the hardware serial port 
    Serial.begin(9600); 
    bluetooth.begin(9600); 
} 

void loop() 
{ 
    bluetooth.listen(); 
    // while there is data coming in, read it 
    // and send to the hardware serial port: 
    while (bluetooth.available() > 0) { 
    char inByte = bluetooth.read(); 
    Serial.write(inByte); 
    } 
} 

它發送接收的所有條目從藍牙默認串行(在我的情況下USB)。 我已經檢查過Amarino,並且從我的手機發送的消息顯示在Arduino串行監視器中。

+0

我知道這已經很長時間了,但是你使用無線SD盾嗎? – 2014-10-06 18:41:35

+0

沒有屏蔽,只是Arduino和Blutooth模塊(和USB串口) – Vincent 2014-10-08 07:40:02

0

同樣的問題在這裏。我試着反過來連接0和1,RX和TX(即RX到RX和TX到TX),並且我得到了一些亂碼通信,而不是什麼都沒有。

+0

您是否測試了其他答案中給出的替代連接(對於TX和RX使用插件5和3)?據我記憶,我只改變了這部分連接,並且完美運作。 – Vincent 2014-11-13 15:21:31