How could I send an array to serial port?
-
Hi,
I need to send this array
test[121]={33, 20, 23, 20, 27, 27, 25, 29, 14, 12, 10, 74, 24, 29, 44, 57, 63, 62, 61, 42, 30, 30, 185, 178, 93, 50, 68, 74, 76, 69, 59, 36, 38, 255, 255, 115, 56, 73, 89, 91, 78, 64, 41, 45, 255, 248, 88, 61, 76, 105, 109, 89, 69, 45, 72, 255, 245, 85, 63, 76, 103, 119, 91, 67, 47, 65, 255, 252, 100, 60, 72, 94, 107, 83, 62, 39, 54, 255, 255, 134, 52, 67, 78, 84, 72, 56, 28, 56, 255, 255, 205, 58, 59, 66, 66, 61, 44, 23, 60, 255, 255, 255, 123, 46, 60, 61, 56, 37, 39, 60, 238, 241, 249, 176, 52, 47, 52, 47, 85, 93, 91};
To Serial Port, however it is sending:
!\x14\x17\x14\x1B\x1B\x19\x1D\x0E\f\nJ\x18\x1D,9?>=*\x1E\x1E\xB9\xB2]2DJLE;$&\xFF\xFFs8IY[N@)-\xFF\xF8X=LimYE-H\xFF\xF5U?Lgw[C/A\xFF\xFC""d<H^kS>'6\xFF\xFF\x86""4CNTH8\x1C""8\xFF\xFF\xCD:;BB=,\x17<\xFF\xFF\xFF{.<=8%'<\xEE\xF1\xF9\xB0""4/4/U][
There is a way to send integer number to serial port?
Thanks
-
Hi,
I need to send this array
test[121]={33, 20, 23, 20, 27, 27, 25, 29, 14, 12, 10, 74, 24, 29, 44, 57, 63, 62, 61, 42, 30, 30, 185, 178, 93, 50, 68, 74, 76, 69, 59, 36, 38, 255, 255, 115, 56, 73, 89, 91, 78, 64, 41, 45, 255, 248, 88, 61, 76, 105, 109, 89, 69, 45, 72, 255, 245, 85, 63, 76, 103, 119, 91, 67, 47, 65, 255, 252, 100, 60, 72, 94, 107, 83, 62, 39, 54, 255, 255, 134, 52, 67, 78, 84, 72, 56, 28, 56, 255, 255, 205, 58, 59, 66, 66, 61, 44, 23, 60, 255, 255, 255, 123, 46, 60, 61, 56, 37, 39, 60, 238, 241, 249, 176, 52, 47, 52, 47, 85, 93, 91};
To Serial Port, however it is sending:
!\x14\x17\x14\x1B\x1B\x19\x1D\x0E\f\nJ\x18\x1D,9?>=*\x1E\x1E\xB9\xB2]2DJLE;$&\xFF\xFFs8IY[N@)-\xFF\xF8X=LimYE-H\xFF\xF5U?Lgw[C/A\xFF\xFC""d<H^kS>'6\xFF\xFF\x86""4CNTH8\x1C""8\xFF\xFF\xCD:;BB=,\x17<\xFF\xFF\xFF{.<=8%'<\xEE\xF1\xF9\xB0""4/4/U][
There is a way to send integer number to serial port?
Thanks
Hi @manum,
Actualy that's what you are doing here. But it seems you are reading them as some hexadecimal string format. I guess you are displaying the content of a QByteArray with qDebug() here. What you can do is using data() to get a
char *and read the data aschar *or casted tounsigned char *. -
Hi and welcome to devnet,
How are you currently sending the data ?
What is on the receiving end ? -
Hi again,
My code is
QByteArray c(test, 121);
serial2.write(c);I send to serial port, the receiving is an arduino, the code is:
byte patron[121];
for(int x=1; x<122; x++){
patron[x-1]=pattern[x];
}And then the qt code receive the comunication from arduino
QByteArray buffer= serial2.readAll();
qDebug() << "resultado= "<<buffer;
The issue is that when I check the array test with the following code:
qDebug() <<"c= "<< c;
Qt print :
!\x14\x17\x14\x1B\x1B\x19\x1D\x0E\f\nJ\x18\x1D,9?>=*\x1E\x1E\xB9\xB2]2DJLE;$&\xFF\xFFs8IY[N@)-\xFF\xF8X=LimYE-H\xFF\xF5U?Lgw[C/A\xFF\xFC""d<H^kS>'6\xFF\xFF\x86""4CNTH8\x1C""8\xFF\xFF\xCD:;BB=,\x17<\xFF\xFF\xFF{.<=8%'<\xEE\xF1\xF9\xB0""4/4/U][
Instead of
test[121]={33, 20, 23, 20, 27, 27, 25, 29, 14, 12, 10, 74, 24, 29, 44, 57, 63, 62, 61, 42, 30, 30, 185, 178, 93, 50, 68, 74, 76, 69, 59, 36, 38, 255, 255, 115, 56, 73, 89, 91, 78, 64, 41, 45, 255, 248, 88, 61, 76, 105, 109, 89, 69, 45, 72, 255, 245, 85, 63, 76, 103, 119, 91, 67, 47, 65, 255, 252, 100, 60, 72, 94, 107, 83, 62, 39, 54, 255, 255, 134, 52, 67, 78, 84, 72, 56, 28, 56, 255, 255, 205, 58, 59, 66, 66, 61, 44, 23, 60, 255, 255, 255, 123, 46, 60, 61, 56, 37, 39, 60, 238, 241, 249, 176, 52, 47, 52, 47, 85, 93, 91};
If Arduino doesn't receive the array as integer, it doesn't work.
Maybe it is clearer now.
Thanks in advanced
-
Hi again,
My code is
QByteArray c(test, 121);
serial2.write(c);I send to serial port, the receiving is an arduino, the code is:
byte patron[121];
for(int x=1; x<122; x++){
patron[x-1]=pattern[x];
}And then the qt code receive the comunication from arduino
QByteArray buffer= serial2.readAll();
qDebug() << "resultado= "<<buffer;
The issue is that when I check the array test with the following code:
qDebug() <<"c= "<< c;
Qt print :
!\x14\x17\x14\x1B\x1B\x19\x1D\x0E\f\nJ\x18\x1D,9?>=*\x1E\x1E\xB9\xB2]2DJLE;$&\xFF\xFFs8IY[N@)-\xFF\xF8X=LimYE-H\xFF\xF5U?Lgw[C/A\xFF\xFC""d<H^kS>'6\xFF\xFF\x86""4CNTH8\x1C""8\xFF\xFF\xCD:;BB=,\x17<\xFF\xFF\xFF{.<=8%'<\xEE\xF1\xF9\xB0""4/4/U][
Instead of
test[121]={33, 20, 23, 20, 27, 27, 25, 29, 14, 12, 10, 74, 24, 29, 44, 57, 63, 62, 61, 42, 30, 30, 185, 178, 93, 50, 68, 74, 76, 69, 59, 36, 38, 255, 255, 115, 56, 73, 89, 91, 78, 64, 41, 45, 255, 248, 88, 61, 76, 105, 109, 89, 69, 45, 72, 255, 245, 85, 63, 76, 103, 119, 91, 67, 47, 65, 255, 252, 100, 60, 72, 94, 107, 83, 62, 39, 54, 255, 255, 134, 52, 67, 78, 84, 72, 56, 28, 56, 255, 255, 205, 58, 59, 66, 66, 61, 44, 23, 60, 255, 255, 255, 123, 46, 60, 61, 56, 37, 39, 60, 238, 241, 249, 176, 52, 47, 52, 47, 85, 93, 91};
If Arduino doesn't receive the array as integer, it doesn't work.
Maybe it is clearer now.
Thanks in advanced
@manum
qDebug()displays the content ofQByteArrayas string/printable characters. Characters outside normal printable will be displayed in\xDDformat. Bearing that in mind, the output you show does match byte-for-byte with what you have in yourtest[]array, e.g. from the start33, 20, 23shows as!\x14\x17. So it is sending what you give it, you are just not understanding howqDebug()is showing the bytes.Now, whether what you are doing at the receiving end with the stream is correct/appropriate I cannot say.
-
@manum
qDebug()displays the content ofQByteArrayas string/printable characters. Characters outside normal printable will be displayed in\xDDformat. Bearing that in mind, the output you show does match byte-for-byte with what you have in yourtest[]array, e.g. from the start33, 20, 23shows as!\x14\x17. So it is sending what you give it, you are just not understanding howqDebug()is showing the bytes.Now, whether what you are doing at the receiving end with the stream is correct/appropriate I cannot say.
-
@manum
Well, you are already printing it! Just I think you don't like the output format.I think you mean to see it more like your
33, 20, 23, 20, 27, ...input. So you want a decimal-number-string output for each byte received. I can't test, but I think something like http://doc.qt.io/qt-5/qstring.html#number-1 will do it, so callQString::number(b)for eachbbyte in theQByteArray?