Страница 1 из 1

Урок №9 Библиотека Button

Добавлено: 04 авг 2017, 03:01
Dimzon
Здравствуйте Эдуард! Не могли бы Вы помочь в решении одной проблемы? Не могу сообразить, как заставить работать библиотеку кнопки на I2C расширителе портов PCF8575. Как правильней сделать, что бы библиотека работала и на пинах микроконтроллера, и на дополнительных пинах расширителя портов? Создать в библиотеке дополнительный класс, с третьим аргументом типа объект "expander"? Или ввести в уже существующий класс третий необязательный аргумент? Например с таким конструктором - "Button(byte pin, byte timeButton, char exp);" Но как тогда выбирать нужный метод между DigitalRead и expander.DigitalRead? Если найдёте в себе капельку душевного тепла и поможете разобраться - буду Вам бесконечно благодарен :)

Re: Урок №9 Библиотека Button

Добавлено: 04 авг 2017, 03:05
Dimzon
Почему-то попала не в тот раздел - я её в "Уроках" хотел разместить... Если можно, перенесите её туда

Re: Урок №9 Библиотека Button

Добавлено: 04 авг 2017, 22:25
Эдуард
Здравствуйте!
Я бы выбрал вариант - создать другую библиотеку, только для кнопок, подключенных через PCF8575. За универсальность всегда надо платить, а ресурсы контроллеров Ардуино ограничены. Зачем вы будите загружать в контроллер функции обработки кнопок, подключенных через PCF8575 если не собираетесь их использовать в данном проекте. И наоборот, для кнопок подключенных непосредственно к выводам микроконтроллера.

Re: Урок №9 Библиотека Button

Добавлено: 05 авг 2017, 05:10
Dimzon
Спасибо за совет! А как в таком случае правильней поступить - объявить объект расширителя внутри библиотеки или в основном скетче? Во втором случае Скетч не компилируется, с ошибкой - мол, объект не заявлен в данной области, а в первом - не получится использовать расширитель для других целей... В общем тупик

Re: Урок №9 Библиотека Button

Добавлено: 05 авг 2017, 09:37
Эдуард
Здравствуйте!
А вы включили библиотеку для расширителя в h и cpp файлы вашей библиотеки?

Re: Урок №9 Библиотека Button

Добавлено: 07 авг 2017, 13:19
Dimzon
Да, включал. Проблема проявляется при компиляции самой библиотеки кнопки - если объявляешь объект экспандера в основном скетче, то компиляция библиотеки завершается с ошибкой, что типа объект не заявлен в данной области. А если объявить объект экспандер внутри библиотеки кнопки - то в этом случае компиляция библиотеки проходит без ошибок, но тогда экспандер не получится использовать для других целей в основном скетче - ибо опять же он не заявлен в данной области. Что-то мне подсказывает, что при создании объекта "кнопка", нужно в качестве третьего аргумента (expander$$) вместо объекта "expander" нужно указывать ссылку на объект (или на адрес объекта - как правильно выразиться?). Вот щас пытаюсь с этим разобраться