Есть “железка”, у которой с завода задается адрес I2C и изменить его никак нельзя. Мне нужно использовать сразу две такие “железки”.
Ничего лучше (умнее) не придумал, как “повесить” вторую “железку” на софтовый I2C.
В принципе, подумал я, ничего сложного быть не должно. Ведь всё обращение в библиотеке к I2C идет в одной функции (по сути основное вмешательство будет только в неё):
А как правильно, с минимальными изменениями библиотеки, выполнить переделку чтобы одновременно можно было и через Soft I2C и через “железячный” слать данные?
Библиотека оформлена в виде класса. Создать отдельное поле-указатель, куда передавать по ссылке в конструкторе &Wire или &SoftWire ? Или как-то по другому можно сделать?
Пока только теория вида “мысли в слух”, еще не устанавливал даже Soft I2C (но о его существовании в принципе нагуглил).
Адрес устройства “вшит” в библиотеку через #define.
В аналогичной ситуации повесил железки на два софтовых I2C и дописал в библиотеке метод доступа к софтовому I2C. Соответственно инициализация одинаковая только ноги разные в конструкторе…
Теоретически, можно соорудить и самому, типа на 74ls125 (4-е 3-стабильных буфера). SCL однонаправленный, а SDA коммутировать портом. Но, не проверял.
Не, не всё так просто.(