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.6k 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 7 Jun 2017, 21:42 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
    • 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

                            22/25

                            17 Jun 2017, 23:33

                            • Login

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