Установка функции из одного объекта для вызова другим объектом в библиотеке Arduino

0

Я немного новичок в написании на C, поэтому надеюсь, что не буду далеко здесь.

Я работаю над библиотекой для управления несколькими типами светодиодных ИС. Существует множество различных типов библиотек RGB Pixel, каждый со своим собственным уникальным наименованием, но все они действительно выполняют одни и те же основные действия. Создается объект "strip" или "strand", каждый пиксель получает заданное значение цвета, и полоса затем обновляется.

Моя библиотека обрабатывает получение значений цвета пикселей из программного обеспечения в фоновом режиме и предоставляет пользователю самые последние значения из массива, принадлежащего этому объекту.

Я бы хотел, чтобы пользователь мог инициировать свой светодиодный ленточный объект и передать ссылку на этот объект в мою библиотеку, а затем разрешить им передавать свои объекты "setPixelColor()" и "UpdateStrip()" в библиотеку также. Если это достижимо, я полагаю, что моя библиотека могла бы обрабатывать все операции управления светом для любой данной PixelLibrary.

Я считаю, что то, что я ищу, - это правильный способ передать указатель функций между объектами? Не искать кого-то, чтобы сделать это для меня, а просто искать направленное руководство. Я искал google, пока этим утром, но я не знаю, что я даже использую правильные условия. Любые советы или рекомендации будут большой помощью. Благодарю!

  • 1
    с или с ++ ? Будьте конкретны, пожалуйста! А также лучше показать код, который вы уже пробовали ...
  • 1
    Поиск указателей на функции, да. Также ищите указатели на функции-члены, статические указатели на функции-члены и то, что вы можете evtl. do для передачи контекста объекта в c ++ (обычно это делается со структурами / дескрипторами в c).
Теги:
arduino
libraries
led

1 ответ

1

Похоже, что вам нужен базовый класс или виртуальная база/интерфейс. Вы определяете класс с общими данными и методами, которые работают во всех ваших светодиодах. Этот общий или абстрактный класс определяет общие функции. Каждый из ваших типов светодиодных нитей затем наследует базовый класс/интерфейс и реализует определенные функции для установки светодиода, например.

Используя этот подход, код приложения работает с использованием методов базового класса/интерфейса, обрабатывающих все нити одинаково.

Если вы используете этот подход, я также рекомендую вам создать статический заводский метод, который возвращает указатель базового класса/интерфейса после создания специально требуемого объекта.

abstractController = CreateLEDStrandController ("Strand Type");//Создает правильный объект, возвращает абстрагированный указатель базового класса.

abstractController.SetLEDColor( "красный"); // Фактически вызывает конкретный объект SetLEDColor

  • 0
    Я не знаю, может ли текущий компилятор использовать эту информацию, но в этих случаях полезно помечать метод в производных классах как финальный. Ключевое слово сообщит компилятору, что дальнейшим производным классам не разрешено иметь собственную реализацию метода. Между прочим, это также должно оптимизировать выполнение, поскольку делает излишним прохождение VMT.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню