Serial Data "reading" disorder
-
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.
-
@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.
-
@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 ... -
@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
-
Mix both techniques: an ID to know what kind of data you have and the "special" char to know where to split.
-
-
You can use a while loop and take the first element at each iteration so no need for a particular check.
-
@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()" ?