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.9k 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 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

                            13/16

                            24 Nov 2015, 22:18

                            • Login

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