使用Xbee PRO S1时,Arduino和Qt之间的通信错误
Communication error between Arduino and Qt using Xbee PRO S1
我一直在尝试用Arduino Mega 2560及其Xbee Shield和两个Xbee Pro S1做一个灯光GUI,一个连接到Arduino,另一个连接到PC。我的问题是:但是我可以从Qt发送数据到我的arduino并读取它,我不能以另一种方式做同样的事情。当试图发送字符串作为"Confirmadorn"时,它到达我的Qt标签错误,有时我得到完整的字符串,其他的我收到它的一半。
我的arduino代码是char buffer[50];
String trama, dir, com, data;
int indexdir, indexcom, indexdata;
void setup(){
Serial.begin(9600);
}
void loop(){
trama= "Confirmadorn";
const char *bf = trama.c_str();
if(Serial.available() > 0)
{
Serial.readBytesUntil('/', buffer,500);
Serial.print(bf);
Serial.flush();
}
}
我的Qt QSerialPort配置是
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
serial = new QSerialPort(this);
serial->setPortName("COM3"); //COM-port your Arduino is connected to
serial->open(QIODevice::ReadWrite);
serial->setBaudRate(QSerialPort::Baud9600);
serial->setDataBits(QSerialPort::Data8);
serial->setParity(QSerialPort::NoParity);
serial->setStopBits(QSerialPort::OneStop);
serial->setFlowControl(QSerialPort::NoFlowControl);
connect(serial,SIGNAL(readyRead()),this,SLOT(serialReceived()));
}
我像这样发送和读取数据
void MainWindow::serialReceived()
{
QByteArray readData = serial->readAll();
//while (serial->waitForReadyRead(500))
// readData.append(serial->readAll());
ui->label->setText(readData);
}
void MainWindow::writeData(const QByteArray &data)
{
serial->write(data);
serial->flush();
serial->waitForBytesWritten(500);
}
工具行表示我已经尝试了两个选项…
我注意到,做调试,如果我在ui->label->setText(readData);
中放置一个断点;如果它没有很好地到达(完整的"Confirmadorn"字符串),这个断点在这一行中获得两次,第一个readData等于字符串的后半部分(即"madorn"),另一个它为字符串的其余部分赋值(即"confirm")。
我也试过设置更高的波特率,57600,但我不能发送或接收任何数据,虽然我之前在XCTU应用程序中设置了波特率。
有人知道从Arduino接收完整字符串的方法吗?或者至少如何正确设置Arduino和PC的Xbee以更高的波特率工作?
谢谢你的回答,很抱歉我的写作技巧…
尝试使用serial->readLine()
而不是serial->readall()
,您可以在serial->canReadLine()
返回true之后等待循环,然后您可以确保您收到的数据是一个完整的字符串。
相关文章:
- 如何在cpp文件之间切换窗口?在Qt中
- 通过插槽和信号在不同线程中的两个qt对象之间进行通信
- 类指针之间的 Qt 差异
- 呼叫 QSound,它们之间有延迟 Qt C++
- Qt 错误 iso c++ 禁止指针和整数之间的比较 -permissive
- 在QT中的两个窗口之间共享websocket连接
- 类 QLayout 和类 QMainWindow Qt c++ 之间的继承
- 如何在Qt中预先建立的窗口之间传递数据?
- 如何在Qt WebChannel中以独立于平台的方式在HTML/Javascript和C++之间进行通信?
- Qt:工作线程和 GUI 事件之间的关系
- 在Emscripten和Qt之间共享OpenGL代码
- 2 个 QGraphicsPixmapItems 之间的 QT 冲突检测
- 删除字节数组 : Qt 缓冲区之间的空字符 (\x00)
- 在QT中的Windows之间传递信息
- 覆盆子Pi(QT C )和Arduino(Arduino IDE)之间的通信
- 在QT C 中使用QMOVIE和信号/插槽之间在GIF中导航
- QT在两个类之间连接
- 两个对象QT之间的示例插槽/信号
- QT和Libevent中的信号和插槽之间的差异
- 在QT应用程序和Windows Explorer之间剪切和粘贴剪贴板交换