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. Serial Data "reading" disorder
Forum Updated to NodeBB v4.3 + New Features

Serial Data "reading" disorder

Scheduled Pinned Locked Moved General and Desktop
arduinoseriesbuffer
16 Posts 3 Posters 6.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
    SGaist
    Lifetime Qt Champion
    wrote on 23 Nov 2015, 23:42 last edited by
    #2

    Hi and welcome to devnet,

    The usual way to handle incoming data is to store them in a buffer until there's enough of them to form a complete package and only then parse the packet.

    Interested in AI ? www.idiap.ch
    Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

    F 1 Reply Last reply 24 Nov 2015, 20:35
    1
    • M Offline
      M Offline
      mrjj
      Lifetime Qt Champion
      wrote on 24 Nov 2015, 10:15 last edited by mrjj
      #3

      Hi
      Data most often comes in pieces so as @SGaist says, you must keep reading
      like
      m_readData.append( m_serialPort->readAll());
      until you got whole "line" of data
      you can check
      if (m_readData.size() >= EXPECTED_BYTES)
      Parse()
      or have kind of stop marker in the data.

      Other note. you could maybe use same separator between numbers, like | and then
      just say
      serialBuffer = QString::fromStdString(serialData.toStdString());
      QStringList list = serialBuffer .split ( "|" );
      then you have list of each number.
      list[0] being the first.

      Just a though. might not suit your needs.

      F 1 Reply Last reply 24 Nov 2015, 20:44
      1
      • S SGaist
        23 Nov 2015, 23:42

        Hi and welcome to devnet,

        The usual way to handle incoming data is to store them in a buffer until there's enough of them to form a complete package and only then parse the packet.

        F Offline
        F Offline
        ftsm
        wrote on 24 Nov 2015, 20:35 last edited by
        #4

        @SGaist Thank you or your answer. Yes i suppose that's what I have to do, but I don't really know how. I tried with "waitForReadyRead()" but he doesn't work, my code just stop and crash on it, despite what I read I don't really know how to use it properly.

        1 Reply Last reply
        0
        • M mrjj
          24 Nov 2015, 10:15

          Hi
          Data most often comes in pieces so as @SGaist says, you must keep reading
          like
          m_readData.append( m_serialPort->readAll());
          until you got whole "line" of data
          you can check
          if (m_readData.size() >= EXPECTED_BYTES)
          Parse()
          or have kind of stop marker in the data.

          Other note. you could maybe use same separator between numbers, like | and then
          just say
          serialBuffer = QString::fromStdString(serialData.toStdString());
          QStringList list = serialBuffer .split ( "|" );
          then you have list of each number.
          list[0] being the first.

          Just a though. might not suit your needs.

          F Offline
          F Offline
          ftsm
          wrote on 24 Nov 2015, 20:44 last edited by
          #5

          @mrjj Thank you.
          I used differents letters as separator because i wanted to reconize each data. Indeed I can just use one separator but it means that I have to gather all the data in the good order.
          ".append" seams like a good way but my problem is that I can't know the size of my expected bytes. Each potentiometer can send 1 to 4 digits. I assume there are already solutions for that, but I don't know what ...

          M 1 Reply Last reply 24 Nov 2015, 20:52
          0
          • F ftsm
            24 Nov 2015, 20:44

            @mrjj Thank you.
            I used differents letters as separator because i wanted to reconize each data. Indeed I can just use one separator but it means that I have to gather all the data in the good order.
            ".append" seams like a good way but my problem is that I can't know the size of my expected bytes. Each potentiometer can send 1 to 4 digits. I assume there are already solutions for that, but I don't know what ...

            M Offline
            M Offline
            mrjj
            Lifetime Qt Champion
            wrote on 24 Nov 2015, 20:52 last edited by
            #6

            @ftsm
            Ah ok, yes if they can come out of order then same separator is not a option.

            -Each potentiometer can send 1 to 4 digits
            so maybe there comes 1 byte or maybe 4 ?

            F 1 Reply Last reply 24 Nov 2015, 21:49
            1
            • M mrjj
              24 Nov 2015, 20:52

              @ftsm
              Ah ok, yes if they can come out of order then same separator is not a option.

              -Each potentiometer can send 1 to 4 digits
              so maybe there comes 1 byte or maybe 4 ?

              F Offline
              F Offline
              ftsm
              wrote on 24 Nov 2015, 21:49 last edited by
              #7

              @mrjj Indeed. And so if I try ".append" I will have a huge disorder in datas ...
              I'm still trying to figure out a way to get everything in order but nothing work fine yet

              M 1 Reply Last reply 24 Nov 2015, 21:52
              0
              • F ftsm
                24 Nov 2015, 21:49

                @mrjj Indeed. And so if I try ".append" I will have a huge disorder in datas ...
                I'm still trying to figure out a way to get everything in order but nothing work fine yet

                M Offline
                M Offline
                mrjj
                Lifetime Qt Champion
                wrote on 24 Nov 2015, 21:52 last edited by
                #8

                @ftsm
                but how does the potentiometer send its data ?
                you have no control over the format?

                F 1 Reply Last reply 24 Nov 2015, 22:03
                1
                • M mrjj
                  24 Nov 2015, 21:52

                  @ftsm
                  but how does the potentiometer send its data ?
                  you have no control over the format?

                  F Offline
                  F Offline
                  ftsm
                  wrote on 24 Nov 2015, 22:03 last edited by
                  #9

                  @mrjj The potentiometer send its data via Arduino. I can write how I want to send it. First I tried with "," to separate, but I could'nt reconize wich data was what. So I tried with a specific letter before and after each potentiometer value. In this case it is really hard for me to extract the potentiometer value from the line (from serial) because I only know the "split" technic

                  1 Reply Last reply
                  0
                  • S Offline
                    S Offline
                    SGaist
                    Lifetime Qt Champion
                    wrote on 24 Nov 2015, 22:07 last edited by
                    #10

                    Mix both techniques: an ID to know what kind of data you have and the "special" char to know where to split.

                    Interested in AI ? www.idiap.ch
                    Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                    F 1 Reply Last reply 24 Nov 2015, 22:12
                    1
                    • S SGaist
                      24 Nov 2015, 22:07

                      Mix both techniques: an ID to know what kind of data you have and the "special" char to know where to split.

                      F Offline
                      F Offline
                      ftsm
                      wrote on 24 Nov 2015, 22:12 last edited by
                      #11

                      @SGaist Yes I think that is my best move, that's what I'm currently trying to do.
                      But I have a last problem: how can I try the existence of a string from QstringList ? For example I need to know if after spliting "buffer_split[1]" exist ?

                      M 1 Reply Last reply 24 Nov 2015, 22:18
                      0
                      • S Offline
                        S Offline
                        SGaist
                        Lifetime Qt Champion
                        wrote on 24 Nov 2015, 22:15 last edited by
                        #12

                        You can use a while loop and take the first element at each iteration so no need for a particular check.

                        Interested in AI ? www.idiap.ch
                        Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                        F 1 Reply Last reply 25 Nov 2015, 00:17
                        1
                        • F ftsm
                          24 Nov 2015, 22:12

                          @SGaist Yes I think that is my best move, that's what I'm currently trying to do.
                          But I have a last problem: how can I try the existence of a string from QstringList ? For example I need to know if after spliting "buffer_split[1]" exist ?

                          M Offline
                          M Offline
                          mrjj
                          Lifetime Qt Champion
                          wrote on 24 Nov 2015, 22:18 last edited by
                          #13

                          @ftsm
                          also QstringList has a size() that tells the number of elements. (strings)
                          That also gives hints to valid index.

                          1 Reply Last reply
                          1
                          • S SGaist
                            24 Nov 2015, 22:15

                            You can use a while loop and take the first element at each iteration so no need for a particular check.

                            F Offline
                            F Offline
                            ftsm
                            wrote on 25 Nov 2015, 00:17 last edited by
                            #14

                            @SGaist @mrjj Thank you for that, I managed to split correctly and find the right data.
                            But I am still able to do that only on debug mode, when I try to run the program it's like i'm going too fast and my "->ReadAll()" don't gather enought data. (I saw that with some qDebug()).
                            So I go back to my first problem, if I use a while loop with "append" I will mix the data.
                            Can't I use "waitForReadyRead()" ?

                            1 Reply Last reply
                            0
                            • F Offline
                              F Offline
                              ftsm
                              wrote on 25 Nov 2015, 00:25 last edited by
                              #15

                              OH MY GOD that was the solution since the begining !! It's 1:30am and it's perfectly working !!

                              THank you guys I love you so much !!

                              YAAaaaaaayyy my first beautiful program on Qt and it rules !! THANK YOU

                              M 1 Reply Last reply 25 Nov 2015, 05:13
                              0
                              • F ftsm
                                25 Nov 2015, 00:25

                                OH MY GOD that was the solution since the begining !! It's 1:30am and it's perfectly working !!

                                THank you guys I love you so much !!

                                YAAaaaaaayyy my first beautiful program on Qt and it rules !! THANK YOU

                                M Offline
                                M Offline
                                mrjj
                                Lifetime Qt Champion
                                wrote on 25 Nov 2015, 05:13 last edited by
                                #16

                                @ftsm
                                Congratulations with the baby ;)

                                1 Reply Last reply
                                0

                                11/16

                                24 Nov 2015, 22:12

                                • Login

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