Как отправить int[][] как массив байтов через Serial
У меня есть int arr[50][2];
и мне нужно отправить его через Serial. Но я не знаю, как это сделать. Возможно ли это?
@JVic, 👍0
Обсуждение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.
,
@Juraj
Смотрите также:
- Вход Последовательного Монитора Arduino, шифрование 3DES
- Загрузка Arduino Nano дает ошибку: avrdude: stk500_recv(): programmer is not responding
- В чем разница между библиотеками Software Serial? Какая из них совместима с Arduino Nano?
- Как отправить команду AT на sim800l с помощью SoftwareSerial
- Печать массива с помощью функции печати и последовательной записи в Arduino Uno
- Проблемы с последовательной связью от Arduino к Bluetooth HC-05
- Как Arduino может проверить, подключен ли он к ПК и включен ли компьютер?
- Как отправлять и получать беззнаковые целые (unsigned int) от одного arduino к другому arduino
В каком формате? двоичные данные или читаемый 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