Две платы Arduino с датчиками I2C

Я новенькая и потерянная. Я искал в Интернете информацию о том, как передавать данные нескольких датчиков с одного Arduino на другой с помощью I2C, но безуспешно. Все коды и учебные пособия в Интернете сосредоточены на нескольких ведомых устройствах с одним датчиком.

Прилагаемый Фритцинг не является моим проектом, но мой проект включает в себя 22 датчика давления, и мне нужно записать их показания в Excel с помощью plx, поэтому изображение просто для демонстрации идеи.

Основная идея заключается в передаче данных датчиков от ведомого устройства к ведущему по I2C.

Мне просто нужен ответ, выполнимо это или нет, пожалуйста

, 👍1

Обсуждение

Знаете ли вы, как передавать данные одного датчика по I2C?, @Majenko

да, я сделал это для одного датчика, @tofi

Тогда вы сможете сделать это с помощью большего количества датчиков. Просто запросите (и отправьте) больше данных., @Majenko

если это не слишком много, чтобы спросить, есть ли какой-нибудь пример, который вы можете прислать мне для подражания?, @tofi

Возьми свой код. Если вы запрашиваете данные для 1 датчика, измените их, чтобы запрашивать данные для более чем 1 датчика. Если ваш код отвечает данными для 1 датчика, измените его, чтобы он отвечал данными для более чем 1 датчика., @Majenko

*Ваш* код является примером., @Majenko


1 ответ


0

Есть два основных способа сделать это.

  1. Сначала отправьте байт с ведущего устройства на ведомое устройство, чтобы выбрать нужный датчик, затем запросите данные для выбранного в данный момент датчика или
  2. Запросите у ведомого устройства много байтов и заполняйте их по одному по мере поступления запросов.

Первый способ - это медленный, но "I2C" способ сделать это-в основном каждый датчик имеет свой собственный регистр в ведомом устройстве, и вы выбираете, из какого регистра вы хотите читать.

Второй способ быстрее, но вы должны внутренне отслеживать, где вы находитесь.

Хорошим компромиссом является реализация "автоматического приращения", которое выполняет оба сценария: если вы отправляете байт, он устанавливает текущий датчик для считывания. Затем каждое считывание возвращает текущий датчик и увеличивает номер датчика внутри ведомого устройства, поэтому при следующем считывании будет получен следующий датчик.

Таким образом, у вас есть способ "сбросить" индекс датчика, с которого вы считываете, и достаточно быстро получить все датчики, так как вам просто нужно выполнить несколько операций чтения после одной записи.

,

Wire.begin(9);//9 вот адрес(указан даже в коде главной платы) Провод.onReceive(ххх); пустота xxx(int байт) { l = Wire.read();//Получение значения с главной платы Серийный номер.печать("Давление 12= "); Серийный номер.печать(l); Серийный номер.println(" PSI "); } это код, который я использовал для считывания данных с ведомого устройства для одного датчика, который работает нормально , как добавить регистры для каждого датчика?, @tofi

Это выглядит так, как будто вы посылаете сообщение от хозяина к рабу, а не от раба к хозяину. У тебя все наоборот., @Majenko

Провод.начало(9); Провод.Начало передачи(9); Провод.запись((байт)l); Провод.конечная передача(); это код, который я отправляю данные с платы salve мастеру, @tofi

Вы показываете мне код, который является полной противоположностью тому, что вы утверждаете в своем вопросе., @Majenko

Есть ли какая-то конкретная причина *почему* вы считаете, что вам нужно сделать это с помощью I2C? Это, вероятно, самый сложный протокол для реализации., @Majenko

есть ли какие-то альтернативы?, @tofi

Множество. Вероятно, проще всего реализовать использование одного из UART на каждой плате. Сериал1.печать(аналоговый поток(0)); Сериал1.печать(","); Сериал1.печать(аналоговый поток(1)); Сериал1.печать(","); ... Сериал1.println(analogRead(10));, @Majenko

будет ли исследование UART и как его использовать, спасибо, @tofi

на принимающей стороне кода ur, как будет выглядеть хранение данных каждого датчика?, @tofi

https://majenko.co.uk/blog/reading-serial-arduino | https://majenko.co.uk/blog/splitting-text-c, @Majenko

Почему бы не разместить все датчики на одном Arduino?, @Gil