-------- Weitergeleitete Nachricht -------- Betreff: Re: [PD] sending lists via [comport] Datum: Fri, 31 Jan 2020 22:34:24 +0100 Von: Dr. Maik Hester maik.hester@gmx.de An: hans w. koch hansw.koch@gmail.com Kopie (CC): pd-list@lists.iem.at pd-list@mail.iem.at
Dear list,
the logic in the attached patch works fine, but I am still stuck at two different points:
The Arduino sends each digit of the values as a two-digit ascii. How do I get Arduino to send the complete values as integers instead?
And, how can I tell [pd] when a new data set of e.g. six values begins?
Thanks Maik
Am 29.01.20 um 00:00 schrieb hans w. koch:
if the incoming data all have the same structure (i.e. the strings of numbers have the same lenght), you could group them in lists and then use unpack to sort their destinations. like in the patch attached
hth hans
Am 28.01.2020 um 23:25 schrieb Dr. Maik Hestermaik.hester@gmx.de:
Dear list,
does anyone know how to send the different values of each line from the sample below to [comport] as a list, strip this list in [pd] and route the values to their different destinations?
The data comes via Arduino from a pixy cam.
Here is a sample from Arduino's serial monitor:
Detected 6 block 0: sig: 2 x: 273 y: 36 width: 42 height: 5 index: 41 age: 18 block 1: sig: 1 x: 272 y: 187 width: 36 height: 4 index: 37 age: 18 block 2: sig: 1 x: 266 y: 151 width: 28 height: 4 index: 226 age: 71 block 3: sig: 1 x: 274 y: 109 width: 20 height: 4 index: 155 age: 124 block 4: sig: 2 x: 280 y: 48 width: 32 height: 2 index: 223 age: 72 block 5: sig: 1 x: 240 y: 136 width: 24 height: 2 index: 52 age: 5
At the moment [comport] receives all the numbers one after another (e.g. 2 273 36 42 5 41 18 ...), so that it is impossible for me to tell [pd] which number should go where.
I kept checking the internet for a solution for several days which did not bring me any further, so I hope that someone in the [pd] community could give me a clou.
Thanks Maik
-- __ Dr. Maik Hester Musiker, Musikwissenschaftler, Akkordeon-Restaurator Himmelohstraße 23 D-58454 Witten
Pd-list@lists.iem.at mailing list UNSUBSCRIBE and account-management ->https://lists.puredata.info/listinfo/pd-list
-- __ Dr. Maik Hester Musiker, Musikwissenschaftler, Akkordeon-Restaurator Himmelohstraße 23 D-58454 Witten
Hi,
How do I get Arduino to send the complete values as integers instead? And, how can I tell [pd] when a new data set of e.g. six values begins?
Short answer: you need a protocol. Someone already mentioned SLIP. For Pd there is an external called [mrpeach/slipenc] resp. [mrpeach/slipdec] and for Arduino there are libraries like https://github.com/bakercp/PacketSerial or https://github.com/CNMAT/OSC (see SLIPEncodedSerial.h).
Please read the following to understand the problem which SLIP and similar protocols are trying to solve: https://github.com/bakercp/PacketSerial/blob/master/docs/BACKGROUND.md
It doesn't have to be SLIP, though. You can use any encoding/protocol you like as long as both sides agree :-) I've even (ab)used MIDI because it is quite compact and rather easy to parse.
Christof
On 31.01.2020 23:18, Dr. Maik Hester wrote:
-------- Weitergeleitete Nachricht -------- Betreff: Re: [PD] sending lists via [comport] Datum: Fri, 31 Jan 2020 22:34:24 +0100 Von: Dr. Maik Hester maik.hester@gmx.de An: hans w. koch hansw.koch@gmail.com Kopie (CC): pd-list@lists.iem.at pd-list@mail.iem.at
Dear list,
the logic in the attached patch works fine, but I am still stuck at two different points:
The Arduino sends each digit of the values as a two-digit ascii. How do I get Arduino to send the complete values as integers instead?
And, how can I tell [pd] when a new data set of e.g. six values begins?
Thanks Maik
Am 29.01.20 um 00:00 schrieb hans w. koch:
if the incoming data all have the same structure (i.e. the strings of numbers have the same lenght), you could group them in lists and then use unpack to sort their destinations. like in the patch attached
hth hans
Am 28.01.2020 um 23:25 schrieb Dr. Maik Hestermaik.hester@gmx.de:
Dear list,
does anyone know how to send the different values of each line from the sample below to [comport] as a list, strip this list in [pd] and route the values to their different destinations?
The data comes via Arduino from a pixy cam.
Here is a sample from Arduino's serial monitor:
Detected 6 block 0: sig: 2 x: 273 y: 36 width: 42 height: 5 index: 41 age: 18 block 1: sig: 1 x: 272 y: 187 width: 36 height: 4 index: 37 age: 18 block 2: sig: 1 x: 266 y: 151 width: 28 height: 4 index: 226 age: 71 block 3: sig: 1 x: 274 y: 109 width: 20 height: 4 index: 155 age: 124 block 4: sig: 2 x: 280 y: 48 width: 32 height: 2 index: 223 age: 72 block 5: sig: 1 x: 240 y: 136 width: 24 height: 2 index: 52 age: 5
At the moment [comport] receives all the numbers one after another (e.g. 2 273 36 42 5 41 18 ...), so that it is impossible for me to tell [pd] which number should go where.
I kept checking the internet for a solution for several days which did not bring me any further, so I hope that someone in the [pd] community could give me a clou.
Thanks Maik
-- __ Dr. Maik Hester Musiker, Musikwissenschaftler, Akkordeon-Restaurator Himmelohstraße 23 D-58454 Witten
Pd-list@lists.iem.at mailing list UNSUBSCRIBE and account-management ->https://lists.puredata.info/listinfo/pd-list
-- __ Dr. Maik Hester Musiker, Musikwissenschaftler, Akkordeon-Restaurator Himmelohstraße 23 D-58454 Witten
Pd-list@lists.iem.at mailing list UNSUBSCRIBE and account-management -> https://lists.puredata.info/listinfo/pd-list
As a side note:
you can of course design your own little protocol. Just be careful with something like this:
[length, data1, data2, ..., length, data1, data2, ...]
For this to work you need to know the start of the transmission and you can't recover from data loss because when you start parsing from a random position, you don't know what each byte actually means.
So it is generally safer to either choose one byte as a delimiter (probably with some kind of escape mechanism, like SLIP does) or reserve certain bytes as status bytes (like MIDI does). This way you can start listening to an already running stream of data and know exactly where a new packet begins.
Of course you can just send/receive the data as ASCII, where the delimiter probably would be \0 or \n.
If you only send data *from* the Arduino to Pd, you can easily use FUDI (Pd messages):
Serial.print("foo 1 2 3; bar 1 2 3;\n");
In Pd you just need to collect bytes to till you reach a newline (\n) and then send the resulting list of bytes to [fudiparse] and it will output the messages [foo 1 2 3( and [bar 1 2 3(.
Christof
On 01.02.2020 01:11, Christof Ressi wrote:
Hi,
How do I get Arduino to send the complete values as integers instead? And, how can I tell [pd] when a new data set of e.g. six values begins?
Short answer: you need a protocol. Someone already mentioned SLIP. For Pd there is an external called [mrpeach/slipenc] resp. [mrpeach/slipdec] and for Arduino there are libraries like https://github.com/bakercp/PacketSerial or https://github.com/CNMAT/OSC (see SLIPEncodedSerial.h).
Please read the following to understand the problem which SLIP and similar protocols are trying to solve: https://github.com/bakercp/PacketSerial/blob/master/docs/BACKGROUND.md
It doesn't have to be SLIP, though. You can use any encoding/protocol you like as long as both sides agree :-) I've even (ab)used MIDI because it is quite compact and rather easy to parse.
Christof
On 31.01.2020 23:18, Dr. Maik Hester wrote:
-------- Weitergeleitete Nachricht -------- Betreff: Re: [PD] sending lists via [comport] Datum: Fri, 31 Jan 2020 22:34:24 +0100 Von: Dr. Maik Hester maik.hester@gmx.de An: hans w. koch hansw.koch@gmail.com Kopie (CC): pd-list@lists.iem.at pd-list@mail.iem.at
Dear list,
the logic in the attached patch works fine, but I am still stuck at two different points:
The Arduino sends each digit of the values as a two-digit ascii. How do I get Arduino to send the complete values as integers instead?
And, how can I tell [pd] when a new data set of e.g. six values begins?
Thanks Maik
Am 29.01.20 um 00:00 schrieb hans w. koch:
if the incoming data all have the same structure (i.e. the strings of numbers have the same lenght), you could group them in lists and then use unpack to sort their destinations. like in the patch attached
hth hans
Am 28.01.2020 um 23:25 schrieb Dr. Maik Hestermaik.hester@gmx.de:
Dear list,
does anyone know how to send the different values of each line from the sample below to [comport] as a list, strip this list in [pd] and route the values to their different destinations?
The data comes via Arduino from a pixy cam.
Here is a sample from Arduino's serial monitor:
Detected 6 block 0: sig: 2 x: 273 y: 36 width: 42 height: 5 index: 41 age: 18 block 1: sig: 1 x: 272 y: 187 width: 36 height: 4 index: 37 age: 18 block 2: sig: 1 x: 266 y: 151 width: 28 height: 4 index: 226 age: 71 block 3: sig: 1 x: 274 y: 109 width: 20 height: 4 index: 155 age: 124 block 4: sig: 2 x: 280 y: 48 width: 32 height: 2 index: 223 age: 72 block 5: sig: 1 x: 240 y: 136 width: 24 height: 2 index: 52 age: 5
At the moment [comport] receives all the numbers one after another (e.g. 2 273 36 42 5 41 18 ...), so that it is impossible for me to tell [pd] which number should go where.
I kept checking the internet for a solution for several days which did not bring me any further, so I hope that someone in the [pd] community could give me a clou.
Thanks Maik
-- __ Dr. Maik Hester Musiker, Musikwissenschaftler, Akkordeon-Restaurator Himmelohstraße 23 D-58454 Witten
Pd-list@lists.iem.at mailing list UNSUBSCRIBE and account-management ->https://lists.puredata.info/listinfo/pd-list
-- __ Dr. Maik Hester Musiker, Musikwissenschaftler, Akkordeon-Restaurator Himmelohstraße 23 D-58454 Witten
Pd-list@lists.iem.at mailing list UNSUBSCRIBE and account-management ->https://lists.puredata.info/listinfo/pd-list
Pd-list@lists.iem.at mailing list UNSUBSCRIBE and account-management -> https://lists.puredata.info/listinfo/pd-list
On Sat, 1 Feb 2020, 00:25 Dr. Maik Hester, maik.hester@gmx.de wrote:
-------- Weitergeleitete Nachricht -------- Betreff: Re: [PD] sending lists via [comport] Datum: Fri, 31 Jan 2020 22:34:24 +0100 Von: Dr. Maik Hester maik.hester@gmx.de maik.hester@gmx.de An: hans w. koch hansw.koch@gmail.com hansw.koch@gmail.com Kopie (CC): pd-list@lists.iem.at pd-list@mail.iem.at pd-list@mail.iem.at
Dear list,
the logic in the attached patch works fine, but I am still stuck at two different points:
The Arduino sends each digit of the values as a two-digit ascii. How do I get Arduino to send the complete values as integers instead?
Use Serial.write() instead of Serial.print(). I don't know what the rest of your patch/code does, so this could break things. But Serial.write()does send raw bytes and not ASCII.