繁体   English   中英

读取串行端口以进行数据提取

[英]Reading a serial PORT for data extraction

我编写了一个通过串行端口读取数据的程序。

当我运行我的程序时,我总是得到以下评论:“错误,未知错误”。

我在 IMU 传感器上工作,我用 Termite(用于从串行端口读取数据的软件)对其进行了测试,以查看我是否接收到数据,并且确实传感器正常工作,并且我通过 Termite 完美地接收到数据。

另一方面,在 linux 下,如果我执行命令 cat /dev/ttyACM0,我只会在 10 秒内收到数据,从那里决定编写代码

    Imu::Imu() :
        moving(false)
    {

        serialPort = new QSerialPort("COM3",this);

        if (serialPort->open( QIODevice::ReadOnly))
        {
      
            qDebug()<<"SerialPort"<<serialPort<<"Opened successufly";
        }
        else
        {
            qDebug()<<serialPort->error();
            QSerialPortInfo::availablePorts();
        }

        if (!serialPort->setBaudRate(57600))
            log_error("imu","failed to set baudrate, error no %d",serialPort->error());
        serialPort->setDataBits(QSerialPort::Data8);
        serialPort->setParity(QSerialPort::NoParity);
        serialPort->setStopBits(QSerialPort::OneStop); // One Stop bit
        serialPort->setFlowControl(QSerialPort::NoFlowControl);
        qDebug()<<"error"<<serialPort->errorString();

        pollingTimer = new QTimer(this);
        //QObject::connect(this->serialPort,SIGNAL(readyRead()),this,SLOT(pollSerialPort()));
        QObject::connect(pollingTimer, SIGNAL(timeout()), this, SLOT(pollSerialPort()));
        QObject::connect(serialPort, &::QSerialPort::errorOccurred,this,&Imu::handleError);
        pollingTimer->start(10);
        }

    Imu::~Imu()
    {
       serialPort->close();
    }

    void Imu::handleError(QSerialPort::SerialPortError error)
    {
        if (error == QSerialPort::ResourceError){
            qDebug()<<"Handle Error"<<error;
        }
    }

ps:我把代码发给朋友看看是否正确,他测试了一下,收到了数据

不要轮询计时器,而是将 QSerialPort::readyRead 连接到一个插槽,并在插槽内使用 QSerialPort::readAll() 直到 QSerialPort::bytesAvailable() 为 0。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM