DF机器人蓝牙模块与Arduino的接口

时间:2009-09-02 10:34:12

标签: bluetooth arduino

如何将DF机器人蓝牙模块连接到Arduino,以便Arduino可以与之通信。

我使用this tutorial

我设法让模块上的指示灯闪烁,似乎能够很好地配对,但是当我运行串行监视器并发送一封信(比如说'H')时,我会得到一个Java错误:

java.io.IOException: Bad file descriptor in nativeDrain 
    at gnu.io.RXTXPort.nativeDrain(Native Method)
at gnu.io.RXTXPort$SerialOutputStream.flush(RXTXPort.java:1201)
at processing.app.Serial.write(Serial.java:470)
at processing.app.Serial.write(Serial.java:492)
at processing.app.SerialMonitor.send(SerialMonitor.java:128)
at processing.app.SerialMonitor.access$100(SerialMonitor.java:29)
at processing.app.SerialMonitor$4.actionPerformed(SerialMonitor.java:82)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

我检查了接线,我有RXD到板上的RX(引脚0)和TXD到TX(引脚1),其余的接线,但仍然没有运气。可能是什么事?

这是我在Arduino上的代码:

int ledpin = 13;
char val;
void setup() {
    pinMode(ledpin, OUTPUT); // pin 48 (on-board LED) as OUTPUT
    Serial.begin(9600); // start serial communication at 9600bps
}

void loop() {
    if( Serial.available() ) { // if data is available to read
        val = Serial.read(); // read it and store it in 'val'
    }

    if( val == 'H' ) { // if 'H' was received
        digitalWrite(ledpin, HIGH); // turn ON the LED
    } else {
        digitalWrite(ledpin, LOW); // otherwise turn it OFF
    }

    delay(100); // wait 100ms for next reading
}

7 个答案:

答案 0 :(得分:1)

尝试将RXTX库升级到最新版本。 IIRC Arduino IDE捆绑了它的一个版本。

答案 1 :(得分:1)

这是一个很长的镜头,但是......

链接教程中的示例使用波特率115200(而不是您的示例中使用的9600)并说:

  

检查串口设置!确保   两者的波特率均设置为115200   主人和奴隶。

可能是:

  • 这仅适用于波特率115200(似乎不太可能)或可能
  • 主站和从站的波特率不是9600

答案 2 :(得分:1)

Arduino /蓝牙模块的笨拙电源可能会导致此错误(即它可能与this Arduino Forum Topic中报告的错误有关。)

答案 3 :(得分:1)

您应该将Rx从蓝牙模块连接到Arduino板上的Tx,反之亦然。或者你已经这样做了吗?将其挂在12 V适配器电源上,以确保电源不是问题。 (一个500 mA应该没问题。)

答案 4 :(得分:1)

我看到两个可能的问题。

第一个可能的问题:

您的接线错误或者说您的接线错误。通常,您将来自BT模块的RX连接到Arduino上的TX和BT上的TX连接到Arduino上的RX。

第二个可能的问题:

您无法连接蓝牙模块,然后使用内置串行监视器应用程序来监控Arduino上的串行端口。我不确定你的硬件,但通常你不能连接它们,因为它们是同一个串口。

断开Arduino与PC的连接。从其他来源启动Arduino。将PC连接到BT模块。在PC上运行您的fav TTY应用程序(tera术语很好)并连接到BT模块COM端口并输入“H”。

让我知道你得到了什么!

答案 5 :(得分:0)

我在通过串口建立从PC到GSM Modem的通信方面遇到了类似的麻烦。我第一次在vista上使用java.comm,这是不可能的。后来,我切换到RxTxComm,它更可靠。请改用它。

答案 6 :(得分:0)

我正在使用我的Arduino蓝牙伴侣银,以下链接是我用来管理蓝牙通信的。

http://rxtx.qbang.org/wiki/index.php/Two_way_communcation_with_the_serial_port

我必须从这里导入RXTX库:

http://rxtx.qbang.org/wiki/index.php/Two_way_communcation_with_the_serial_port

与其他用户所说的一样,使用波特率115200,并连接

蓝牙-RX线 - > Arduino-TX线,

蓝牙-TX线 - > Arduino-RX线

第一个环节对我来说是一个重大突破。希望它可以帮到你。