有谁能告诉我为什么在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个点等。尝试了几乎所有可用的解决方案。
答案 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)
这可能是因为蓝牙同时解析数据。当同时发送两个不同的数据时,可能会发生这种情况。试着控制你的数据流。