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
    #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