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.7k 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.
  • mrjjM mrjj

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

    mrjjM 1 Reply Last reply
    0
    • F ftsm

      @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 ...

      mrjjM Offline
      mrjjM Offline
      mrjj
      Lifetime Qt Champion
      wrote on 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
      1
      • mrjjM mrjj

        @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 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

        mrjjM 1 Reply Last reply
        0
        • F ftsm

          @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

          mrjjM Offline
          mrjjM Offline
          mrjj
          Lifetime Qt Champion
          wrote on 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
          1
          • mrjjM mrjj

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

            F Offline
            F Offline
            ftsm
            wrote on 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
            • SGaistS Offline
              SGaistS Offline
              SGaist
              Lifetime Qt Champion
              wrote on 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
              1
              • SGaistS SGaist

                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 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 ?

                mrjjM 1 Reply Last reply
                0
                • SGaistS Offline
                  SGaistS Offline
                  SGaist
                  Lifetime Qt Champion
                  wrote on 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
                  1
                  • F ftsm

                    @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 ?

                    mrjjM Offline
                    mrjjM Offline
                    mrjj
                    Lifetime Qt Champion
                    wrote on 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
                    • SGaistS SGaist

                      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 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 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

                        mrjjM 1 Reply Last reply
                        0
                        • F ftsm

                          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

                          mrjjM Offline
                          mrjjM Offline
                          mrjj
                          Lifetime Qt Champion
                          wrote on last edited by
                          #16

                          @ftsm
                          Congratulations with the baby ;)

                          1 Reply Last reply
                          0

                          • Login

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