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.
  • 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