关于qt读取串口的求助 10C

初学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;
}

图片说明

5个回答

助手正常说明你发送那端没问题,那么你确认一下你自己做的接收程序的串口参数是不是都作对了,如果已经作对了参数依然无法进行通讯,不妨在本地电脑先用串口助手来对你的接收程序进行调试,这样才方便找出问题

phenix2009
白色一大坨 你程序我跑了一下的确不通,qt了解有限,如果是用其他方法倒是懂点
大约 2 年之前 回复

1、确定串口打开了?
2、Data=serial->readAll();可以在这句加断点,看执行完后,data变了没
3.data是个CString,你知道readAll()返回的格式是啥吗,不可能只有一个数吧,应该是1帧吧,你把一帧数拿来去toint,toint只能转一个数,“1 2 3”这种直接toint那就是0
4、建议你用PCOMM这个库,有.h .lib .dll三个文件,比较好用,我也经常写异步串口

建议你有c币提问,不如去下点qt串口的资源,里面有不少做这个的

qq_40931330
qq_40931330 不好意思我才看见 谢谢你了
大约 2 年之前 回复

serial->setBaudRate(QSerialPort::Baud9600);
serial->setParity(QSerialPort::NoParity);
serial->setDataBits(QSerialPort::Data8);
serial->setStopBits(QSerialPort::OneStop);
serial->setFlowControl(QSerialPort::NoFlowControl);
这几个参数确定是对的吗? 不确定的,可以先只使用波特率设置, 其他的先缺省试试

qq_40931330
qq_40931330 还是错的
大约 2 年之前 回复

可能你的通讯延时设置有问题哦

qq_40931330
qq_40931330 解决了,加个个信号和槽之后就能收到数据了,这是延时的原因吗
大约 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐