73 lines
1.6 KiB
C++
73 lines
1.6 KiB
C++
#ifndef BLINEKR_TICKER_H
|
|
#define BLINEKR_TICKER_H
|
|
|
|
#if defined(ARDUINO)
|
|
#if ARDUINO >= 100
|
|
#include <Arduino.h>
|
|
#else
|
|
#include <WProgram.h>
|
|
#endif
|
|
#endif
|
|
|
|
#include "../Blinker/BlinkerDebug.h"
|
|
|
|
extern "C" {
|
|
typedef void (*blinker_callback_t)(void);
|
|
}
|
|
|
|
class BlinkerTicker
|
|
{
|
|
public :
|
|
BlinkerTicker() {}
|
|
// : day_time(0)
|
|
// , os_time(0)
|
|
// {}
|
|
|
|
// void freshTime(uint32_t time_s) { day_time = time_s; os_time = millis(); }
|
|
|
|
void attach(uint32_t seconds, blinker_callback_t func)
|
|
{
|
|
aim_time = seconds;
|
|
tickerFunc = func;
|
|
|
|
isRun = true;
|
|
}
|
|
|
|
void detach() { isRun = false; }
|
|
|
|
void run()
|
|
{
|
|
if (millis() - os_time >= 1000 && millis() - os_time < 2000)
|
|
{
|
|
os_time += 1000;
|
|
tick_time ++;
|
|
}
|
|
else if (millis() - os_time >= 2000)
|
|
{
|
|
tick_time += (millis() - os_time) / 1000;
|
|
os_time = millis();
|
|
}
|
|
|
|
if (isRun)
|
|
{
|
|
if (tick_time - aim_time >= 0 && tick_time - aim_time < 60)
|
|
{
|
|
BLINKER_LOG_ALL(BLINKER_F("ticker trigged"));
|
|
isRun = false;
|
|
|
|
if (tickerFunc) tickerFunc();
|
|
}
|
|
}
|
|
}
|
|
|
|
protected :
|
|
uint32_t tick_time;
|
|
uint32_t os_time;
|
|
uint32_t aim_time;
|
|
bool isRun = false;
|
|
|
|
blinker_callback_t tickerFunc = NULL;
|
|
};
|
|
|
|
#endif
|