Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.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++ 试图通过qserialport将arduino与pc通信_C++_Arduino_Qtserialport_Qqmlapplicationengine_Qtquick Designer - Fatal编程技术网

C++ 试图通过qserialport将arduino与pc通信

C++ 试图通过qserialport将arduino与pc通信,c++,arduino,qtserialport,qqmlapplicationengine,qtquick-designer,C++,Arduino,Qtserialport,Qqmlapplicationengine,Qtquick Designer,为了在创建基于qtquick的应用程序后将arduino连接到PC,我创建了arduino.cpp和arduino.h文件。代码中有错误,但我无法获取并解决它。请,如果有人能帮忙,这里是.cpp和.h文件。我不知道为什么serialsettings不被接受为类型名, 然后对某些行进行错误处理 #include "Arduino.h" #include<QSerialPort> Arduino::Arduino() { } void Arduino::set

为了在创建基于qtquick的应用程序后将arduino连接到PC,我创建了arduino.cpp和arduino.h文件。代码中有错误,但我无法获取并解决它。请,如果有人能帮忙,这里是.cpp和.h文件。我不知道为什么serialsettings不被接受为类型名, 然后对某些行进行错误处理

#include "Arduino.h"
#include<QSerialPort>
Arduino::Arduino()
{
}

   void Arduino::setupSerialPort(serialSettings *port){
       port->baudRate=QSerialPort::Baud9600;
       port->dataBits=QSerialPort::Data8;
       port->parity=QSerialPort::NoParity;
       port->stopBits=QSerialPort::OneStop;
       port->flowControl= QSerialPort::NoFlowControl;

   }


   void Arduino::setupCom(){

   serial1 = new QSerialPort();
   serial2 = new QSerialPort();
   serial3 = new QSerialPort();
   // Port 1 settings sudo echo "Test" > /dev/ttyS10

   port1Settings.name="ttyS10";
   setupSerialPort(&port1Settings);

   // Port 2 settings
   port2Settings.name="ttyUSB0";
   port2Settings.name="ttyS12";
   setupSerialPort(&port2Settings);
   // Port 3 settings
   port3Settings.name="ttyUSB3";
   port3Settings.name="ttyS14";
   setupSerialPort(&port3Settings);

   }



   bool Arduino::openSerialPort(QSerialPort *ser,serialSettings p)
   {
       ser->setPortName(p.name);
       bool serialWorking=false;
       if (ser->open(QIODevice::ReadWrite)) {
           if (ser->setBaudRate(p.baudRate)
                   && ser->setDataBits(p.dataBits)
                   && ser->setParity(p.parity)
                   && ser->setStopBits(p.stopBits)
                   && ser->setFlowControl(p.flowControl)) {

               //statusBar->showMessage(tr("Connected to %1 ").arg(p.name));
               qDebug()<<"connected to 1%";

               serialWorking=true;
              // connect(ser, SIGNAL(readyRead()), SLOT(showResponse()));
   //            port1Infos=QSerialPortInfo(p.name);
   //                    qDebug()<<"Connected to port : "<<port1Infos.productIdentifier()<<port1Infos.description()<<port1Infos.manufacturer();

           } else {
               ser->close();
               //QMessageBox::critical(this, tr("Erreur dans les parametres de communication Serie %1").arg(p.name), ser->errorString());
               qDebug()<<"Erreur dans les parametres de communication Serie";
               //statusBar->showMessage(tr("Open error"));
               qDebug()<<"open error";
           }
       } else {
           //QMessageBox::critical(this, tr("Erreur!"), ser->errorString());
        qDebug()<<"Erreur "<<ser->error()<<" .Impossible d'ouvrir le port Serie 1: "<<ser->errorString();
        //statusBar->showMessage(tr("Impossible d'ouvrir le port Serie %1: %2").arg(p.name).arg(ser->errorString()));
       }
       return serialWorking;

   }


   void Arduino::openSerialPorts(){



        qDebug()<<"ouvertture des Ports Serie: "<<port1Settings.name<<" "<<port2Settings.name<<" "<<port3Settings.name;

       if (!serial1->isOpen()){

           serial1Working=openSerialPort(serial1,port1Settings);
           if (!serial1Working){
              // arret(2,true);
           }
       }

//        if (!serial2->isOpen()){

//            serial2Working=openSerialPort(serial2,port2Settings);
//            if (!serial2Working){
//                arret(2,true);
//            }
//        }

//        if (!serial3->isOpen()){

//            serial3Working=openSerialPort(serial3,port3Settings);
//            if (!serial3Working){
//                arret(2,true);
//            }
//        }

       machineStarting=true;

       connect (this,SIGNAL(checkCom1()),this,SLOT(updateChargement()));

           if (!com1Working){
           doAction(QString("X"),serial1);
        // We wait for the correct response for 0.5s with a one shot timer
           startSingleShotTimer(checkCom1Timer,intervalleCheckCom);
           connect(checkCom1Timer, SIGNAL(timeout()), this, SLOT (updateChargement()));
           }

   }
   void updateChargement()
   { const QByteArray requestData;
       requestData.fromStdString(std::string("hi"));
       serial.write(requestData);
       if (serial.waitForBytesWritten(m_waitTimeout)) {
//! [8] //! [10]
           // read response
           if (serial.waitForReadyRead(currentWaitTimeout)) {
               QByteArray responseData = serial.readAll();
               while (serial.waitForReadyRead(10))
                   responseData += serial.readAll();

               const QString response = QString::fromUtf8(responseData);

QDebug()<<"reponse arduino""<< response;

   }
}}

#ifndef SERIALCOM_H
#define SERIALCOM_H
#include <QtSerialPort>
#include <QSerialPortInfo>
class Arduino
{
public:
   Arduino();
   {QString name;
       qint32 baudRate;
       QString stringBaudRate;
       QSerialPort::DataBits dataBits;
       QString stringDataBits;
       QSerialPort::Parity parity;
       QString stringParity;
       QSerialPort::StopBits stopBits;
       QString stringStopBits;
       QSerialPort::FlowControl flowControl;
       QString stringFlowControl;}
void setupini();
void setupCom();
void openSerialPorts();
void updateChargement();
private:
  

   void  setupSerialPort(serialSettings *port);

   serialSettings port1Settings;
   serialSettings port2Settings;
   serialSettings port3Settings;

   QSerialPortInfo port1Infos;
   QSerialPortInfo port2Infos;
   QSerialPortInfo port3Infos;

  QSerialPort *serial;// utilise pour les tests! a supprimer apres
  QSerialPort *serial1;// COM1
  QSerialPort *serial2;// COM2
  QSerialPort *serial3;// COM3
  bool serial1Working,serial2Working,serial3Working;

  bool openSerialPort(QSerialPort *ser, serialSettings p);

  void sendMsg(QSerialPort *ser,QString msg);

};

#endif // SERIALCOM_H
#包括“Arduino.h”
#包括
Arduino::Arduino()
{
}
void Arduino::setupSerialPort(serialSettings*端口){
端口->波特率=QSerialPort::Baud9600;
port->dataBits=QSerialPort::Data8;
端口->奇偶校验=QSerialPort::NoParity;
端口->停止位=QSerialPort::OneStop;
端口->流量控制=QSerialPort::NoFlowControl;
}
void Arduino::setupCom(){
serial1=新的QSerialPort();
serial2=新的QSerialPort();
serial3=新的QSerialPort();
//端口1设置sudo echo“Test”>/dev/ttyS10
port1Settings.name=“ttyS10”;
设置串行端口(和端口1设置);
//端口2设置
port2Settings.name=“ttyUSB0”;
port2Settings.name=“ttyS12”;
设置串行端口(和端口2设置);
//端口3设置
port3Settings.name=“ttyUSB3”;
port3Settings.name=“ttyS14”;
设置串行端口(和端口3设置);
}
boolArduino::openSerialPort(QSerialPort*ser,SerialP设置)
{
ser->setPortName(p.name);
bool serialWorking=false;
如果(ser->open(QIODevice::ReadWrite)){
if(ser->setBaudRate(p.baudRate)
&&ser->setDataBits(p.dataBits)
&&ser->设置奇偶校验(p.奇偶校验)
&&ser->设置停止位(p.停止位)
&&ser->setFlowControl(p.flowControl)){
//状态栏->显示消息(tr(“连接到%1”).arg(p.name));

qDebug()它是否未编译或在运行时的行为不符合预期?这可能会有所帮助,稍后将检查您的代码。它在编写@Mansoor1时显示错误。您应该在此处复制并粘贴准确的错误,而不是对其进行解释或让人们猜测。2.您使用
serialsettings
作为类型,声明和定义在哪里?假设您是lac查看
serialsettings
的定义,请参阅我第一条评论的第二部分。PS:由于屏幕截图不可文本搜索,因此此处不欢迎使用。它是否未编译或在运行时表现不符合预期?这可能会有所帮助,稍后将检查您的代码。它在编写@Mansoor1时显示错误。您应该复制并粘贴这里有确切的错误,不要转述或让人们猜测。2.您使用
serialsettings
作为类型,声明和定义在哪里?假设您缺少
serialsettings
的定义,请参阅我第一条评论的第二部分。注:屏幕截图不受欢迎,因为它们无法进行文本搜索。