Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ QT5打开串行端口时出现问题_C++_Qt_Serial Port - Fatal编程技术网

C++ QT5打开串行端口时出现问题

C++ QT5打开串行端口时出现问题,c++,qt,serial-port,C++,Qt,Serial Port,我试图用QT5.5打开一个串行端口,但该端口始终无法打开。我不太熟悉端口和串行端口,但我找不到任何问题,我启动一切的方式。我正在使用MacOSX void MainWindow::init_port() { port = new QSerialPort("com4"); //create port port->open(QIODevice::ReadWrite); //open port if(!port->isOpen()) {

我试图用QT5.5打开一个串行端口,但该端口始终无法打开。我不太熟悉端口和串行端口,但我找不到任何问题,我启动一切的方式。我正在使用MacOSX

void MainWindow::init_port()
{
    port = new QSerialPort("com4");     //create port

    port->open(QIODevice::ReadWrite); //open port
    if(!port->isOpen())
    {
        QMessageBox::warning(this, "port error", "Can't open port!");
    }
//    if(serial.open(QIODevice::ReadWrite))
//        serial.write("ok*");
    else
    {
        //error
        qDebug() << port->errorString();
    }

    //set port properties
    port->setBaudRate(QSerialPort::Baud9600); //9600 FOR ARDUINO
    port->setFlowControl(QSerialPort::NoFlowControl);
    port->setParity(QSerialPort::NoParity);
    port->setDataBits(QSerialPort::Data8);
    port->setStopBits(QSerialPort::OneStop);
}
void主窗口::初始化端口()
{
port=new QSerialPort(“com4”);//创建端口
端口->打开(QIODevice::ReadWrite);//打开端口
如果(!port->isOpen())
{
警告(这是“端口错误”,“无法打开端口!”);
}
//if(serial.open(QIODevice::ReadWrite))
//串行写入(“ok*”;
其他的
{
//错误
qDebug()错误字符串();
}
//设置端口属性
端口->setBaudRate(QSerialPort::Baud9600);//9600用于ARDUINO
端口->设置流量控制(QSerialPort::NoFlowControl);
端口->设置奇偶校验(QSerialPort::NoParity);
端口->设置数据位(QSerialPort::Data8);
端口->设置停止位(QSerialPort::OneStop);
}

我的总体目标是通过GUI与Arduino微控制器进行通信。

最有可能的是,在
open()
之前需要设置端口的属性:

void主窗口::初始化端口()
{
port=new QSerialPort(“com4”);//创建端口
//设置端口属性
端口->setBaudRate(QSerialPort::Baud9600);//9600用于ARDUINO
端口->设置流量控制(QSerialPort::NoFlowControl);
端口->设置奇偶校验(QSerialPort::NoParity);
端口->设置数据位(QSerialPort::Data8);
端口->设置停止位(QSerialPort::OneStop);
端口->打开(QIODevice::ReadWrite);//打开端口
如果(!port->isOpen())
{
警告(这是“端口错误”,“无法打开端口!”);
}
其他的
{
//错误
qDebug()错误字符串();
}
} 
如果
open()
失败,还要检查的返回值和
error()

使用OpenMode模式打开串行端口,如果 成功的否则返回false并设置一个错误代码,该错误代码可以 可以通过调用error()方法获得


打开串行端口后,最好先休眠250毫秒,然后再检查端口是否打开。

我在设置设置后尝试打开,但仍然存在相同的问题。错误代码是:“没有这样的文件或目录”,但我不确定这意味着什么…@ajl123-你的Arduino连接到COM4了吗?您得到的返回值和错误()是什么?同时检查您的if/else,在这两种情况下都给出一个“错误:)@ajl123-“没有这样的文件或目录”,表示找不到“com4”。港口有空吗?以防万一:也试试“COM4”。不确定Qt或您使用的操作系统,但在Windows中,我们需要“\\\.\\COM4”。我正在使用Macosx。你怎么知道要使用哪个com端口等等?@ajl123-不知道Mac,但你可以在Arduino IDE中查看它连接到哪个端口。OS X上没有
com4
之类的东西。你必须先列出可用的端口。在Unice上,端口只是
/dev
中的文件名,因此您可以将
ttyS3
表示为
/dev/ttyS3
,但该设备节点必须存在。最简单的方法是:拔下设备,
ls/dev | sort>f1
,插入设备,
ls/dev | sort>f2;diff-u f1 f2
,您的设备节点将显示在差异中。确保您的代码允许用户选择端口/设备节点!
void MainWindow::init_port()
{
    port = new QSerialPort("com4");     //create port

    //set port properties
    port->setBaudRate(QSerialPort::Baud9600); //9600 FOR ARDUINO
    port->setFlowControl(QSerialPort::NoFlowControl);
    port->setParity(QSerialPort::NoParity);
    port->setDataBits(QSerialPort::Data8);
    port->setStopBits(QSerialPort::OneStop);

    port->open(QIODevice::ReadWrite); //open port
    if(!port->isOpen())
    {
        QMessageBox::warning(this, "port error", "Can't open port!");
    }
    else
    {
        //error
        qDebug() << port->errorString();
    }
}