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

Я немного новичок в написании на С, так что я надеюсь, что не далеко отсюда.

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

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

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

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

0

Решение

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

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

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

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

abstractController.SetLEDColor ( «красный»); // На самом деле вызывает конкретный объект SetLEDColor

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]