I have int arr[50][2];
and I need to send it through Serial. But I don't know how to do it. is it possible?
-
In what format? binary data or readable ascii? seperated with comma's?– JotCommented Jun 1, 2018 at 20:38
-
@Jot Is it possible to get the same array on another side?– JVicCommented Jun 1, 2018 at 20:41
-
3No, unless you make code that can do that. The most common way is to use Serial.print and transmit each element of the array (that is 100 times the Serial.print). You could transmit a single binary block of data, but the computer might have the MSB at the lower byte and the Arduino at the higher byte or vice versa. You need a very accurate description of the data which is transferred. It can be defined as a single block of 200 bytes consisting of 2 byte signed integers with MSB first with start byte and end byte and a crc checksum.– JotCommented Jun 1, 2018 at 20:45
-
1I forgot to mention to select a high baudrate. Not 9600 but 115200 or higher. The output tx buffer is 64 bytes, and if the tx buffer is filled, the Serial.print will wait and that will delay the sketch.– JotCommented Jun 1, 2018 at 21:35
-
Send it to what through serial? A PC, another arduino, a printer, something else?– CraigCommented Jun 1, 2018 at 21:46
1 Answer
In the comment you write that the receiving end is an Arduino too. Then you can send the data in binary form.
To send the array:
Serial.write((byte*) arr, sizeof(arr));
(byte*)
is cast of the memory location of arr to a byte arraysizeof
returns the size of the array in bytes
To receive the binary data you must know the size. Here we read 100 16-bit integers:
Serial.readBytes((byte*) arr, 100 * sizeof(short));
Function readBytes is one of the 'timed' functions of Stream. It waits for the next byte (until timeout).
If one Arduino is 8-bit and the second is 32-bit, then use the type short
instead of int, because the size of type int is different, but the type short is 16 bit long on all Arduinos.