Как отправить int[][] как массив байтов через Serial

У меня есть int arr[50][2]; и мне нужно отправить его через Serial. Но я не знаю, как это сделать. Возможно ли это?

, 👍0

Обсуждение

В каком формате? двоичные данные или читаемый ascii? разделенные запятыми?, @Jot

@Jot Возможно ли получить тот же массив на другой стороне?, @JVic

Нет, если только вы не создадите код, который может это сделать. Самый распространенный способ — использовать Serial.print и передавать каждый элемент массива (то есть в 100 раз больше Serial.print). Вы можете передать один двоичный блок данных, но у компьютера MSB может быть в младшем байте, а у Arduino — в старшем, или наоборот. Вам нужно очень точное описание передаваемых данных. Его можно определить как один блок из 200 байт, состоящий из 2-байтовых знаковых целых чисел со MSB первым, начальным байтом, конечным байтом и контрольной суммой crc., @Jot

Я забыл упомянуть о выборе высокой скорости передачи данных. Не 9600, а 115200 или выше. Выходной буфер tx составляет 64 байта, и если буфер tx заполнен, Serial.print будет ждать, и это задержит скетч., @Jot

Куда отправить через последовательный порт? На ПК, на другой Arduino, на принтер, на что-то еще?, @Craig

@Craig на другой ардуино, @JVic

Последовательная связь похожа на пусковую установку для теннисных мячей... в вашем примере она выстрелит в вас 100 теннисными мячами, один за другим... вы можете расположить их в любом порядке после того, как поймаете... поэтому вы должны знать, в какой последовательности они были запущены., @jsotola


1 ответ


Лучший ответ:

1

В комментарии вы пишете, что принимающая сторона тоже Arduino. Тогда вы можете отправлять данные в двоичном виде.

Чтобы отправить массив:

Serial.write((byte*) arr, sizeof(arr));
  • (byte*) преобразует ячейку памяти arr в массив байтов
  • sizeof возвращает размер массива в байтах

Чтобы получить двоичные данные, необходимо знать размер. Здесь мы считываем 100 16-битных целых чисел:

Serial.readBytes((byte*) arr, 100 * sizeof(short));

Функция readBytes — одна из «синхронизированных» функций Stream. Она ждет следующий байт (до тайм-аута).

Если одна плата Arduino 8-битная, а вторая — 32-битная, то используйте тип short вместо int, поскольку размер типа int отличается, но тип short имеет длину 16 бит на всех платах Arduino.

,