Библиотека 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.