[英]Communication error between Arduino and Qt using Xbee PRO S1
我一直在嘗試使用帶有其Xbee Shield和兩個Xbee Pro S1的Arduino Mega 2560進行Lights GUI,一個連接到Arduino,另一個連接到PC。 我的問題是:但是我可以將數據從Qt發送到我的arduino並讀取它,但我不能用其他方式做同樣的事情。 嘗試將字符串發送為“ Confirmado \\ r \\ n”時,它到達我的Qt標簽錯誤,有時我會收到完整的字符串,而其他字符串我會收到一半。
我的arduino代碼是
char buffer[50];
String trama, dir, com, data;
int indexdir, indexcom, indexdata;
void setup(){
Serial.begin(9600);
}
void loop(){
trama= "Confirmado\r\n";
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);
放置一個斷點ui->label->setText(readData);
; 如果它不能很好地到達(完整的“ Confirmado \\ r \\ n”字符串),則此斷點在該行中獲取兩次,第一個readData等於字符串的后半部分(即“ mado \\ r \\ n”),另一個其中一個對字符串的其余部分(即“ Confir”)進行賦值。
我還嘗試設置了更高的波特率57600,但我無法發送或接收任何數據,盡管我之前已經在XCTU應用中設置了波特率。
有誰知道從Arduino接收完整字符串的方法嗎? 或者至少如何正確設置Arduino和PC的Xbee以使用更高的波特率?
感謝您的回答,也很抱歉我的寫作能力...
嘗試使用serial->readLine()
而不是serial->readall()
,例如,您可以在serial->canReadLine()
返回true之后循環等待,然后確保收到的數據是完整字符串。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.