Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Arduino analog input to QT Gauge.
Forum Updated to NodeBB v4.3 + New Features

Arduino analog input to QT Gauge.

Scheduled Pinned Locked Moved Unsolved General and Desktop
25 Posts 2 Posters 10.5k Views 2 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • SGaistS Offline
    SGaistS Offline
    SGaist
    Lifetime Qt Champion
    wrote on last edited by
    #8

    What errors is it emitting ?

    Interested in AI ? www.idiap.ch
    Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

    1 Reply Last reply
    0
    • S Offline
      S Offline
      StevieGardiner
      wrote on last edited by
      #9

      C:\Users\Stephn\Documents\300zx\dialog.cpp:37: error: no matching function for call to 'Dialog::connect(QDialog*&, const char*, QQuickItem*&, const char*)'
      QObject::connect(Dialog, SIGNAL(oil_pressure_bar(QVariant)),Rectangle, SLOT(needleAngle(QVariant)));
      ^

      This is the error I'm getting. much appreciated.

      1 Reply Last reply
      0
      • SGaistS Offline
        SGaistS Offline
        SGaist
        Lifetime Qt Champion
        wrote on last edited by
        #10

        You are trying to connect classes. You have to connect instances of these classes.

        Interested in AI ? www.idiap.ch
        Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

        1 Reply Last reply
        3
        • S Offline
          S Offline
          StevieGardiner
          wrote on last edited by StevieGardiner
          #11

          And by classes you mean "dialog" when I should be connecting " updatedoilpress"?
          And instead of "Rectangle" I should be connecting Rotation"?

          Also would this QObject::Connect be the easiest and simplest way of connecting a C++ signal (analogread2, oil_press_bar) to a QML Slot (Neeedle, needleAngle)?

          1 Reply Last reply
          0
          • SGaistS Offline
            SGaistS Offline
            SGaist
            Lifetime Qt Champion
            wrote on last edited by
            #12

            You'd have to search for the objects you are interest in in your engine and then connect them.

            By the way, why not make this dialog also with QtQuick ?

            Interested in AI ? www.idiap.ch
            Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

            1 Reply Last reply
            0
            • S Offline
              S Offline
              StevieGardiner
              wrote on last edited by
              #13

              Ok so id search for the instances, I can google how to do that.

              What are the benefits of using QtQuick, over my method?

              1 Reply Last reply
              0
              • SGaistS Offline
                SGaistS Offline
                SGaist
                Lifetime Qt Champion
                wrote on last edited by
                #14

                That was just curiosity. Nothing wrong in mixing both. If you go with a QtQuick only GUI you should be able to drop the dependency on the QtWidgets module which makes your application lighter weight.

                Interested in AI ? www.idiap.ch
                Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                1 Reply Last reply
                0
                • S Offline
                  S Offline
                  StevieGardiner
                  wrote on last edited by
                  #15

                  Hi,

                  I took your advice and used the cpp for serial data collection and the qml for the GUI, but I'm having a problem with this error.

                  C:\Users\Stephn\Documents\nissan300zx\serialport.h:50: error: 'double SerialPort::oil_pressure_volt' conflicts with a previous declaration
                  double oil_pressure_volt;
                  ^

                  I know that the code is duplicating names, but id like to read that name in Q_Property and then send it to QML.

                  #ifndef SERIALPORT_H
                  #define SERIALPORT_H
                  
                  #include <QObject>
                  #include <QQuickItem>
                  #include <QSerialPort>
                  #include <QSerialPortInfo>
                  #include <QByteArray>
                  
                  class SerialPort : public QObject
                  {
                      Q_OBJECT
                      Q_PROPERTY(QString oil_pressure_volt READ oil_pressure_volt WRITE set_oil_pressure_volt NOTIFY oil_pressure_volt_Changed)
                  
                  public:
                      SerialPort(QObject *parent = 0);
                              SerialPort(QString);
                  
                  
                              QString oil_pressure_volt() const
                              {
                                  return m_oil_pressure_volt;
                              }
                  
                  public slots:
                      void analogRead2();
                      void updateOilPressure(QString);
                  
                  
                      void set_oil_pressure_volt(QString oil_pressure_volt)
                      {
                          if (m_oil_pressure_volt == oil_pressure_volt)
                              return;
                  
                          m_oil_pressure_volt = oil_pressure_volt;
                          emit oil_pressure_volt_Changed(oil_pressure_volt);
                      }
                  
                  signals:
                  
                      void oil_pressure_volt_Changed(QString oil_pressure_volt);
                  
                  private:
                      QSerialPort *arduino;
                      static const quint16 arduino_uno_vendor_id = 0x2341;
                      static const quint16 arduino_uno_product_id = 0x0001;
                      QByteArray serialData;
                      QString serialBuffer;
                      QString parsed_data;
                      double oil_pressure_volt;
                  
                      QString m_oil_pressure_volt;
                  };
                  
                  #endif // SERIALPORT_H
                  
                  

                  Could I rename the oil_pressure_volt in the CPP

                  void SerialPort::updateOilPressure(QString sensor_reading)
                  {
                      //oil_pressure_volt(double) = data;
                  
                  }
                  
                  1 Reply Last reply
                  0
                  • SGaistS Offline
                    SGaistS Offline
                    SGaist
                    Lifetime Qt Champion
                    wrote on last edited by
                    #16

                    Why are you declaring a oil_pressure_volt property QString then the matching variable as double and still use QString everywhere ?

                    Interested in AI ? www.idiap.ch
                    Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                    1 Reply Last reply
                    0
                    • S Offline
                      S Offline
                      StevieGardiner
                      wrote on last edited by
                      #17

                      Sorry, that was me trying different ideas out.

                      #ifndef SERIALPORT_H
                      #define SERIALPORT_H
                      
                      #include <QObject>
                      #include <QQuickItem>
                      #include <QSerialPort>
                      #include <QSerialPortInfo>
                      #include <QByteArray>
                      
                      class SerialPort : public QObject
                      {
                          Q_OBJECT
                          Q_PROPERTY(double oil_pressure_volt READ oil_pressure_volt WRITE set_oil_pressure_volt NOTIFY oil_pressure_volt_Changed)
                      
                      public:
                          SerialPort(QObject *parent = 0);
                                  SerialPort(QString);
                      
                                  double oil_pressure_volt() const
                                  {
                                      return m_oil_pressure_volt;
                                  }
                      
                      public slots:
                          void analogRead2();
                          void updateOilPressure(QString);
                      
                          void set_oil_pressure_volt(double oil_pressure_volt)
                          {
                              if (m_oil_pressure_volt == oil_pressure_volt)
                                  return;
                      
                              m_oil_pressure_volt = oil_pressure_volt;
                              emit oil_pressure_volt_Changed(oil_pressure_volt);
                          }
                      
                      signals:
                      
                          void oil_pressure_volt_Changed(double oil_pressure_volt);
                      
                      private:
                          QSerialPort *arduino;
                          static const quint16 arduino_uno_vendor_id = 0x2341;
                          static const quint16 arduino_uno_product_id = 0x0001;
                          QByteArray serialData;
                          QString serialBuffer;
                          QString parsed_data;
                          double oil_pressure_volt;
                      
                          double m_oil_pressure_volt;
                      };
                      
                      #endif // SERIALPORT_H
                      
                      This is the error,
                      
                      C:\Users\Stephn\Documents\nissan300zx\serialport.h:48: error: 'double SerialPort::oil_pressure_volt' conflicts with a previous declaration
                           double oil_pressure_volt;
                                  ^
                      
                      1 Reply Last reply
                      0
                      • S Offline
                        S Offline
                        StevieGardiner
                        wrote on last edited by
                        #18

                        Hi, So after making a few suggested changes I cant now display a "0" on my qml text field, I think this zero is the first reading of the analogRead 2.

                        I changed to this in the main.

                        engine.rootContext()->setContextProperty("serialport", &serialport);
                        

                        and this in the header.

                        Q_PROPERTY( double oilPressureVoltage MEMBER m_oil_pressure_volt WRITE set_oil_pressure_volt NOTIFY oil_pressure_volt_Changed )
                        
                        

                        I think I need to add some code into a string,

                        #ifndef SERIALPORT_H
                        #define SERIALPORT_H
                        
                        #include <QObject>
                        #include <QQuickItem>
                        #include <QSerialPort>
                        #include <QSerialPortInfo>
                        #include <QByteArray>
                        
                        class SerialPort : public QObject
                        {
                            Q_OBJECT
                            Q_PROPERTY( double oilPressureVoltage MEMBER m_oil_pressure_volt WRITE set_oil_pressure_volt NOTIFY oil_pressure_volt_Changed )
                        
                        public:
                            SerialPort(QObject *parent = 0);
                                    SerialPort(QString);
                        
                        public slots:
                            void analogRead2();
                            void updateOilPressure(QString);
                        
                            void set_oil_pressure_volt(double oilPressureVoltage)
                            {
                                if (m_oilPressureVoltage == oilPressureVoltage)
                                    return;
                        
                                m_oilPressureVoltage = oilPressureVoltage;
                                emit oil_pressure_volt_Changed(oilPressureVoltage);
                            }
                        
                        signals:
                        
                            void oil_pressure_volt_Changed(double oilPressureVoltage);
                        
                        private:
                            QSerialPort *arduino;
                            static const quint16 arduino_uno_vendor_id = 0x2341;
                            static const quint16 arduino_uno_product_id = 0x0001;
                            QByteArray serialData;
                            QString serialBuffer;
                            QString parsed_data;
                            double oil_pressure_volt;
                            double m_oilPressureVoltage;
                        };
                        
                        #endif // SERIALPORT_H
                        
                        
                        1 Reply Last reply
                        0
                        • SGaistS Offline
                          SGaistS Offline
                          SGaist
                          Lifetime Qt Champion
                          wrote on last edited by
                          #19

                          Can you how how you are using that class in QML ?

                          Interested in AI ? www.idiap.ch
                          Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                          1 Reply Last reply
                          0
                          • S Offline
                            S Offline
                            StevieGardiner
                            wrote on last edited by
                            #20

                            yes its...

                            import QtQuick 2.5
                            import QtQuick.Window 2.2
                            import QtQuick.Extras 1.4
                            import QtQuick.Controls 2.0
                            import SerialPortlib 1.0
                            
                            Window {
                                id: gauge
                                visible: true
                                width: 640
                                height: 480
                            
                                TextEdit {
                                    id: textEdit
                                    text: SerialPort.newValue
                                    verticalAlignment: Text.AlignVCenter
                                    horizontalAlignment: Text.AlignCenter
                                    }
                            }
                            
                            and...
                            
                            

                            int main(int argc, char *argv[])
                            {
                            QGuiApplication app(argc, argv);
                            SerialPort serialport;
                            qmlRegisterType<SerialPort>("SerialPortlib", 1, 0, "SerialPort");
                            QQmlApplicationEngine engine;
                            engine.load(QUrl(QStringLiteral("qrc:/main.qml")));

                            return app.exec();
                            
                            1 Reply Last reply
                            0
                            • SGaistS Offline
                              SGaistS Offline
                              SGaist
                              Lifetime Qt Champion
                              wrote on last edited by
                              #21

                              What's that newValue ?

                              You seem to be trying to use a SerialPort object but you are currently accessing it's class (or Type in QML).

                              You either need to create a SerialPort object in QML or give an instance from it to the engine.

                              Did you already read the QML CPP integration chapter of Qt's documentation ?

                              Interested in AI ? www.idiap.ch
                              Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                              1 Reply Last reply
                              0
                              • S Offline
                                S Offline
                                StevieGardiner
                                wrote on last edited by
                                #22

                                I tried to create an object by doing;

                                import QtQuick 2.5
                                import QtQuick.Window 2.2
                                import QtQuick.Extras 1.4
                                import QtQuick.Controls 2.0
                                import SerialPortlib 1.0
                                
                                Window {
                                    visible: true
                                    width: 640
                                    height: 480
                                    id: gauge
                                
                                    SerialPort{
                                        OnOil_pressure_volt_Changed:(console.log(newValue));
                                    }
                                }
                                
                                
                                

                                with no joy, is this what your referring too?

                                1 Reply Last reply
                                0
                                • SGaistS Offline
                                  SGaistS Offline
                                  SGaist
                                  Lifetime Qt Champion
                                  wrote on last edited by
                                  #23

                                  Your QML slot name is wrong.

                                  AFAIK it should be onOil_pressure_volt_changed Note that Qt's naming style is camelCase, that might help you match your code with the documentation.

                                  You should maybe take a look at http://qmlbook.org

                                  Interested in AI ? www.idiap.ch
                                  Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                                  1 Reply Last reply
                                  1
                                  • S Offline
                                    S Offline
                                    StevieGardiner
                                    wrote on last edited by
                                    #24

                                    Ahh thank you, that was an interesting read, ive achieved what I wanted.

                                    1 Reply Last reply
                                    1
                                    • SGaistS Offline
                                      SGaistS Offline
                                      SGaist
                                      Lifetime Qt Champion
                                      wrote on last edited by
                                      #25

                                      Great !

                                      In that case, please mark the thread as solved using the "Topic Tools" button so that other forum users may know a solution has been found :)

                                      Interested in AI ? www.idiap.ch
                                      Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                                      1 Reply Last reply
                                      0

                                      • Login

                                      • Login or register to search.
                                      • First post
                                        Last post
                                      0
                                      • Categories
                                      • Recent
                                      • Tags
                                      • Popular
                                      • Users
                                      • Groups
                                      • Search
                                      • Get Qt Extensions
                                      • Unsolved