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. Problem with data read from USB port

Problem with data read from USB port

Scheduled Pinned Locked Moved Solved General and Desktop
14 Posts 7 Posters 5.3k Views
  • 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.
  • VRoninV Offline
    VRoninV Offline
    VRonin
    wrote on last edited by
    #2

    the problem is here: serialBuffer += QString::fromStdString(serialData.toStdString());

    how does your sensor encode the data?

    "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
    ~Napoleon Bonaparte

    On a crusade to banish setIndexWidget() from the holy land of Qt

    P 1 Reply Last reply
    1
    • VRoninV VRonin

      the problem is here: serialBuffer += QString::fromStdString(serialData.toStdString());

      how does your sensor encode the data?

      P Offline
      P Offline
      pj0909
      wrote on last edited by
      #3

      @VRonin The sensor is based on capacitive technology. Any change in capacitance gives corresponding values.

      VRoninV 1 Reply Last reply
      0
      • P pj0909

        @VRonin The sensor is based on capacitive technology. Any change in capacitance gives corresponding values.

        VRoninV Offline
        VRoninV Offline
        VRonin
        wrote on last edited by
        #4

        @pj0909 said in Problem with data read from USB port:

        values

        This still does not answer my question. how are those values represented in binary format to the serial output? is it a 32 bit integer, a 64 bit double precision float, an ASCII encoded string?

        "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
        ~Napoleon Bonaparte

        On a crusade to banish setIndexWidget() from the holy land of Qt

        P 1 Reply Last reply
        0
        • VRoninV VRonin

          @pj0909 said in Problem with data read from USB port:

          values

          This still does not answer my question. how are those values represented in binary format to the serial output? is it a 32 bit integer, a 64 bit double precision float, an ASCII encoded string?

          P Offline
          P Offline
          pj0909
          wrote on last edited by
          #5

          @VRonin Sorry, I misinterpreted your question. The answer to your question is 64 bit double precision float.

          jsulmJ kshegunovK 2 Replies Last reply
          0
          • P pj0909

            @VRonin Sorry, I misinterpreted your question. The answer to your question is 64 bit double precision float.

            jsulmJ Online
            jsulmJ Online
            jsulm
            Lifetime Qt Champion
            wrote on last edited by
            #6

            @pj0909 Then you should use http://doc.qt.io/qt-5/qbytearray.html#toDouble without converting to string:

            bool ok = false;
            serialBuffer += sensor->readAll().toDouble(&ok);
            if (!ok) // error
            

            https://forum.qt.io/topic/113070/qt-code-of-conduct

            1 Reply Last reply
            2
            • VRoninV Offline
              VRoninV Offline
              VRonin
              wrote on last edited by VRonin
              #7

              To add to @jsulm, you should also check that serialData contains 64 and only 64 bits of data (i.e. serialData.size()==8) otherwise use QDataStream

              void Dialog::readSerial()
              {
              QDataStream sensorStream(sensor);
              QVector<double> readValues;
              for(;;){
              sensorStream.startTransaction();
              double readValue=0;
              sensorStream >> readValue;
              if(sensorStream.commitTransaction())
              readValues.push_back(readValue);
              else
              break;
              }
              qDebug() << "data read: " << readValues;
              }
              

              P.S.
              If your sensor sends the data in little endian order, you'll have to set the QDataStream byte order http://doc.qt.io/qt-5/qdatastream.html#setByteOrder

              "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
              ~Napoleon Bonaparte

              On a crusade to banish setIndexWidget() from the holy land of Qt

              1 Reply Last reply
              2
              • P pj0909

                @VRonin Sorry, I misinterpreted your question. The answer to your question is 64 bit double precision float.

                kshegunovK Offline
                kshegunovK Offline
                kshegunov
                Moderators
                wrote on last edited by
                #8

                @pj0909 said in Problem with data read from USB port:

                The answer to your question is 64 bit double precision float.

                Then you need to read the data as binary, not as text! Something like this (warning: the code isn't really portable):

                QDataStream in(&serialData, QIODevice::ReadOnly);
                
                double value;
                in >> value;

                Read and abide by the Qt Code of Conduct

                1 Reply Last reply
                3
                • P Offline
                  P Offline
                  pj0909
                  wrote on last edited by
                  #9

                  I will implement the suggestions in the code and will see the output from the sensor. Will let you all know if its working correctly or still there is a problem. Thank you for the suggestions.

                  1 Reply Last reply
                  0
                  • P Offline
                    P Offline
                    pj0909
                    wrote on last edited by
                    #10

                    Finally I solved my problem. I set the floating point precision in addition to the suggestions given above and now I am reading the data as expected.

                    Thank you all for the suggestions.

                    1 Reply Last reply
                    0
                    • N Offline
                      N Offline
                      namduc
                      wrote on last edited by
                      #11

                      Hi all!
                      I have the same problem, I need to communicate with a USB card reader, but I don't recognize it when i plug it with my PC ( Win 7)
                      serialportinfo.hasProductIdentifier() and serialportinfo.hasVendorIdentifier() all return false;
                      Who can help me? Thanks!

                      1 Reply Last reply
                      0
                      • K Offline
                        K Offline
                        kuzulis
                        Qt Champions 2020
                        wrote on last edited by
                        #12

                        What's relation between the serial ports and the USB card readers?

                        1 Reply Last reply
                        2
                        • N Offline
                          N Offline
                          namduc
                          wrote on last edited by
                          #13

                          Reader Card connect directly to the computer using the USB port
                          Are there any libraries supporting this?
                          Thanks!

                          aha_1980A 1 Reply Last reply
                          0
                          • N namduc

                            Reader Card connect directly to the computer using the USB port
                            Are there any libraries supporting this?
                            Thanks!

                            aha_1980A Offline
                            aha_1980A Offline
                            aha_1980
                            Lifetime Qt Champion
                            wrote on last edited by
                            #14

                            Hi @namduc,

                            there is exactly one: libusb

                            Regards

                            Qt has to stay free or it will die.

                            1 Reply Last reply
                            6

                            • Login

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