在arduino中串行监视器中未正确显示字符

时间:2014-04-21 17:58:58

标签: bluetooth arduino arduino-ide

有谁能告诉我为什么在Arduino的串口显示器中没有正确打印字符?我正在粘贴arduino代码。

#include <SoftwareSerial.h>

 #include <LiquidCrystal.h>

    // initialize the library with the numbers of the interface pins

      LiquidCrystal lcd(12,11,5,4,3,2);

     int bluetoothTx = 15;
      int bluetoothRx = 14;

        SoftwareSerial bluetooth(bluetoothTx, bluetoothRx);

         int incomingByte;

         void setup() {
         pinMode(53, OUTPUT);
         Serial.begin(9600);
           lcd.begin(16, 2);
           lcd.clear();
           bluetooth.begin(115200);        // The Bluetooth Mate defaults to 115200bps
            delay(320);                     // IMPORTANT DELAY! (Minimum ~276ms)
             bluetooth.print("$$$");         // Enter command mode
             delay(15);                      // IMPORTANT DELAY! (Minimum ~10ms)
                bluetooth.println("U,9600,N");  // Temporarily Change the baudrate to    9600, no parity
                bluetooth.begin(9600);          // Start bluetooth serial at 9600

                lcd.print("done setup");

               }

                void loop()

                  {
                    lcd.clear();
                     Serial.print("in loop");
                   //Read from bluetooth and write to usb serial
                    if(bluetooth.available()) {
                    Serial.print("BT here");
                    char toSend = (char)bluetooth.read();
                     Serial.print(toSend);
                        lcd.print(toSend);
                       delay(3000);  
                   }delay(3000); 
         }

任何人都可以看看它。它不打印我提供的字符,而是打印其他类似“y”的东西,上面有2个点等。尝试了几乎所有可用的解决方案。

3 个答案:

答案 0 :(得分:0)

您的问题可能是几件事之一。第一个也是最容易检查的是COMMON GROUND。您是仅连接了RX和TX引脚还是GND(地)引脚?确保BT配合的地面连接到Arduino地面。

如果你已经这样做了,那么问题在于波特率。我非常确定SoftwareSerial无法以超过57600的波特率读取.Arduino.cc文档说它可以读取115200,但其他地方说它只能写入115200.

要对此进行测试,您需要在Bluetooth Mate上更改此设置,或使用Mega或Leonardo,它们将具有您应该能够配置的硬件串行端口(用于USB的端口除外)为115200。

如果您在Mega上使用硬件串口或仅使用FTDI或其他东西尝试它并且消息看起来仍然是乱码,那么蓝牙伴侣实际上可能没有配置为按照它声称的115200进行通话。尝试阅读文档或使用其他波特率进行测试。

答案 1 :(得分:0)

检查是否由于以下原因之一而出现错误: -

1)您尚未从数据模式中提供命令退出。将波特率设置为9600后,您将直接切换到循环。您尚未给出退出命令模式的命令。

2)当我使用 RN171 Wi-Fi模块时,我也遇到了同样的问题。我的问题的原因是因为我以整数格式而不是 uint_8 将数据发送到Wi-Fi模块。在使用arduino mega连续读取Wi-Fi模块时,我正在以字符的格式阅读它。

你必须记住 int 实际上是签名的16位整数。因此,在将数据发送到蓝牙模块时,您必须将其作为要发送的字符的 uint_8 ASCII 值发送。您也应该以与发送时相同的格式阅读它。

3)如果这些不是错误,那么 calumb 表示,在命令模式下设置蓝牙模块可能会出错。您还没有检查蓝牙模块的回复是否真的处于命令模式。您必须从蓝牙模块中读取 CMD 回复,并在每个命令的末尾回复确认,以确保其真正完成您想要的操作。

答案 2 :(得分:0)

这可能是因为蓝牙同时解析数据。当同时发送两个不同的数据时,可能会发生这种情况。试着控制你的数据流。