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
    SGaist
    Lifetime Qt Champion
    wrote on 7 Jun 2017, 22:39 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 14 Jun 2017, 20:01 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
      • S Offline
        S Offline
        SGaist
        Lifetime Qt Champion
        wrote on 14 Jun 2017, 20:10 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 15 Jun 2017, 07:44 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 16 Jun 2017, 11:47 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
            • S Offline
              S Offline
              SGaist
              Lifetime Qt Champion
              wrote on 16 Jun 2017, 22:27 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 17 Jun 2017, 04:27 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
                • S Offline
                  S Offline
                  SGaist
                  Lifetime Qt Champion
                  wrote on 17 Jun 2017, 13:42 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 17 Jun 2017, 23:33 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
                    • S Offline
                      S Offline
                      SGaist
                      Lifetime Qt Champion
                      wrote on 18 Jun 2017, 20:09 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 19 Jun 2017, 11:34 last edited by
                        #24

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

                        1 Reply Last reply
                        1
                        • S Offline
                          S Offline
                          SGaist
                          Lifetime Qt Champion
                          wrote on 19 Jun 2017, 22:05 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

                          23/25

                          18 Jun 2017, 20:09

                          • Login

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