Библиотека SimpleTimer в собственном классе. Как использовать?
- Войдите на сайт для отправки комментариев
Вс, 25/10/2015 - 21:21
Добрый вечер, форумчане.
Наверное многие знакомы с библиотекой SimpleTimer. Позволяет не заморачиваться на использование millis() и очень удобна. Использовать ее очень просто в проектах.
НО, как ее использовать в своем классе? Опыта в програмировании не много, поэтому буду очень благодарен за все возможные варианты решения проблемы. Компилятор начинает ругаться - в cpp файле помечена ошибка.
Это .h файл библиотеки
#ifndef ConceptSmartHome_h #define ConceptSmartHome_h #include "SimpleTimer.h" class ConceptPIR { private: int pir_pin; //Пин куда подключен PIR сенсор int time_till_off; // Время, через которые вырубается свет SimpleTimer pir_timer; public: ConceptPIR(int _pir_pin, int _time_till_off); bool begin(); //Функция для использования в Setup, инициализирует инпуты и другое bool run(); //Функция для использования в loop, Она то все и делает. void callback_function(); // Функция, которая вызывается когда срабатывает таймер }; #endif
Это .cpp файл библиотеки
#include "ConceptSmartHome.h" #include "SimpleTimer.h" ConceptPIR::ConceptPIR(int _pir_pin, int _time_till_off){ pir_pin=_pir_pin; time_till_off= _time_till_off; SimpleTimer pir_timer; } void ConceptPIR::callback_function(){ } bool ConceptPIR::begin(){ pinMode(pir_pin, INPUT); //pir_timer.setInterval(time_till_off, callback_function); //Если убрать комментирование, компилятор выдает ошибку return true; } bool ConceptPIR::run(){ pir_timer.run(); return true; }
Компилятор выдает:
C:\Users\HOME\Dropbox\Arduino\arduino-1.6.3\libraries\ConceptSmartHome\ConceptSmartHome.cpp: In member function 'bool ConceptPIR::begin()': C:\Users\HOME\Dropbox\Arduino\arduino-1.6.3\libraries\ConceptSmartHome\ConceptSmartHome.cpp:23:57: error: no matching function for call to 'SimpleTimer::setInterval(int&, <unresolved overloaded function type>)' pir_timer.setInterval(time_till_off, callback_function);
Прошу сильно не ругаться. Програмированние - хобби.
Уберите строку 6 в cpp для начала, т.к. переменная уже объявлена в классе.
А что касается ошибки - нельзя вторым параметром передавать адрес метода. Обзовите свою callback_function, например static (просто добавьте слово static перед объявлением функции). Ошибка исчезнет.
Только тогда и работать с нею надо как со static (надеюсь, Вы знаете что такое статические члены класса), т.е. адрес экземпляра ей надо где-то брать. К сожалению SimpleTimer писали любители и потому у setInterval нет стандартоного для callback'ов параметра UserData (обычно через него просто this передаётся). Но можно либо передавать через внештние данные, либо модифицировать SimpleTimer.