初学qt,在读取串口数据时遇到了一点问题,就是我用arduino写好的程序一直往电脑发数据,在用串口助手看时是正确的显示结果,但是我写的读取串口的程序读出来全是0,不知道是什么原因,代码及结果附在下面。
#include "mainwindow.h"
#include "init.h"
#include <QApplication>
#include <QSerialPortInfo>
#include <QtSerialPort>
#include <QDebug>
#define BUFFSIZE 100
main(int argc, char *argv[])
{
QByteArray Data="SA";
///串口初始化
QSerialPort *serial = new QSerialPort("COM3");
// QObject::connect(serial, SIGNAL(readyRead()), this, SLOT(ReadData()));
serial->setBaudRate(QSerialPort::Baud9600);
serial->setParity(QSerialPort::NoParity);
serial->setDataBits(QSerialPort::Data8);
serial->setStopBits(QSerialPort::OneStop);
serial->setFlowControl(QSerialPort::NoFlowControl);
if (serial->open(QIODevice::ReadWrite)) {
qDebug()<<"open success";
} else {
qDebug()<<"open failed";
}
while(1){
// if(serial->bytesAvailable()>BUFFSIZE){
Data=serial->readAll();
qDebug()<<Data.toInt()<<"1 ";
// }
}
return 0;
}
助手正常说明你发送那端没问题,那么你确认一下你自己做的接收程序的串口参数是不是都作对了,如果已经作对了参数依然无法进行通讯,不妨在本地电脑先用串口助手来对你的接收程序进行调试,这样才方便找出问题
建议你有c币提问,不如去下点qt串口的资源,里面有不少做这个的
serial->setBaudRate(QSerialPort::Baud9600);
serial->setParity(QSerialPort::NoParity);
serial->setDataBits(QSerialPort::Data8);
serial->setStopBits(QSerialPort::OneStop);
serial->setFlowControl(QSerialPort::NoFlowControl);
这几个参数确定是对的吗? 不确定的,可以先只使用波特率设置, 其他的先缺省试试
可能你的通讯延时设置有问题哦
1、确定串口打开了?
2、Data=serial->readAll();可以在这句加断点,看执行完后,data变了没
3.data是个CString,你知道readAll()返回的格式是啥吗,不可能只有一个数吧,应该是1帧吧,你把一帧数拿来去toint,toint只能转一个数,“1 2 3”这种直接toint那就是0
4、建议你用PCOMM这个库,有.h .lib .dll三个文件,比较好用,我也经常写异步串口