Передача массива по i2c

В общем, господа программисты, возник вопрос: у меня есть датчик, который я использую на роботе, по факту это просто 4 ультразвука, смотрящие в разные стороны с кратностью в 90 градусов, и ATMega, которая стоит на этом датчике, вычисляет расстояние до объекта для каждого датчика и отправляет в массив, то есть получается массив по типу cm[4]={23,78,45,12}, и теперь мне этот массив надо передать по I2C на основную плату, но тут возникает вопрос, как это сделать, у меня была идея передавать по одной ячейке, но как это правильно реализовать с wire.onRequest и похожими, есть ли у кого код такой передачи и может ли кто объяснить, как его правильно реализовать, сразу лучше уточню, что датчик должен быть ведомым, так как к основной плате будет привязываться еще 1 датчик и тоже по I2C

Вы так и не написали, в чем у Вас проблема.
Поэтому создается впечатление, что проблема исключительно в лени: зачем я сам буду напрягаться-писать, если форумчане мне и так напишут.

А чем Вас не устраивает штатный способ, который предоставляет библиотека Wire? У неё есть метод

size_t write(const uint8_t *, size_t);

Вот и используйте его. Первым аргументом задать адрес нулевого элемента массива, а вторым – длину массива в байтах. С этим способом что-то не так? Или зачем эти извращения с поэлементной передачей?

Поясните толком в чём проблема и проиллюстрируйте её кодом в котором у Вас что-то не срабатывает.

Спасибо, проблема как таковая только во мне, я недавно начал использовать i2c и не знаю, как реализовать общение, чтобы это работало без костылей. Есть вопрос по примеру, что вы предоставили, то есть мне надо написать, к примеру,

size_t write(const cm[0]*, 4);

и потом просто принимать на основной плате?

Проблема только во мне, а именно в том, что я не знаю, как правильно написать, и спрашиваю примеры кода, потому что я с i2c, работая меньше недели, а те примеры, что есть в интернете, не всё понятно так-то, я согласен, это выглядит как просто просьба, мол, дайте готовый код да и спроектируйте сдайте все за меня

ты не работаешь с i2c, ты просто тыкаешься как слепой кутенок, не имея регулярных знаний. Форум не является площадкой для обучения, для этого есть умные книшки и изучение примеров к ним.

1 лайк

Вот так и не пойму - нормально ли это , отвечать на вопрос ТС, если он не предоставил ни схемы, ни кода?)))

нет, каюсь

Нет, такого бреда Вам писать не надо. Вам надо взять любую книжку по Си или С++ и посмотреть как записывается адрес нулевого элемента массива, а потом написать правильно.