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