Blynk library for embedded hardware. Works with Arduino, ESP8266, Raspberry Pi, Intel Edison/Galileo, LinkIt ONE, Particle Core/Photon, Energia, ARM mbed, etc. http://www.blynk.cc/

Dependents:   Blynk_RBL_BLE_Nano Blynk_MicroBit Blynk_Serial Blynk_RBL_BLE_Nano

Revision:
15:975b60f7a8ff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Blynk/BlynkEveryN.h	Mon Nov 27 19:48:07 2017 +0200
@@ -0,0 +1,69 @@
+
+#ifndef BLYNKEVERYN_H
+#define BLYNKEVERYN_H
+
+#include <Blynk/BlynkDebug.h>
+
+millis_time_t blynk_count_millis() {
+    const millis_time_t ms = BlynkMillis();
+    return ms;
+}
+
+uint16_t blynk_count_seconds16() {
+    const millis_time_t ms = BlynkMillis();
+    return (ms / 1000);
+}
+
+uint16_t blynk_count_minutes16()
+{
+    const millis_time_t ms = BlynkMillis();
+    return (ms / (60000L)) & 0xFFFF;
+}
+
+uint8_t blynk_count_hours8()
+{
+    const millis_time_t ms = BlynkMillis();
+    return (ms / (3600000L)) & 0xFF;
+}
+
+template<typename T, T (*timeGetter)()>
+class BlynkPeriodic {
+public:
+    T mPrev;
+    T mPeriod;
+
+    BlynkPeriodic()           { reset(); mPeriod = 1; };
+    BlynkPeriodic(T period)   { reset(); setPeriod(period); };
+    void setPeriod( T period) { mPeriod = period; };
+    T getTime()               { return (T)(timeGetter()); };
+    T getPeriod()             { return mPeriod; };
+    T getElapsed()            { return getTime() - mPrev; }
+    T getRemaining()          { return mPeriod - getElapsed(); }
+    T getLastTriggerTime()    { return mPrev; }
+    bool ready() {
+        bool isReady = (getElapsed() >= mPeriod);
+        if( isReady ) { reset(); }
+        return isReady;
+    }
+    void reset()              { mPrev = getTime(); };
+    void trigger()            { mPrev = getTime() - mPeriod; };
+
+    operator bool()           { return ready(); }
+};
+
+typedef BlynkPeriodic<millis_time_t,blynk_count_millis> BlynkEveryNMillis;
+typedef BlynkPeriodic<uint16_t,blynk_count_seconds16>   BlynkEveryNSeconds;
+typedef BlynkPeriodic<uint16_t,blynk_count_minutes16>   BlynkEveryNMinutes;
+typedef BlynkPeriodic<uint8_t,blynk_count_hours8>       BlynkEveryNHours;
+
+#define BLYNK_EVERY_N_MILLIS_I(NAME,N)  static BlynkEveryNMillis NAME(N); if(NAME)
+#define BLYNK_EVERY_N_SECONDS_I(NAME,N) static BlynkEveryNSeconds NAME(N); if(NAME)
+#define BLYNK_EVERY_N_MINUTES_I(NAME,N) static BlynkEveryNMinutes NAME(N); if(NAME)
+#define BLYNK_EVERY_N_HOURS_I(NAME,N)   static BlynkEveryNHours NAME(N); if(NAME)
+
+#define BLYNK_EVERY_N_MILLIS(N)  BLYNK_EVERY_N_MILLIS_I(BLYNK_CONCAT2(PER, __COUNTER__),N)
+#define BLYNK_EVERY_N_SECONDS(N) BLYNK_EVERY_N_SECONDS_I(BLYNK_CONCAT2(PER, __COUNTER__),N)
+#define BLYNK_EVERY_N_MINUTES(N) BLYNK_EVERY_N_MINUTES_I(BLYNK_CONCAT2(PER, __COUNTER__),N)
+#define BLYNK_EVERY_N_HOURS(N)   BLYNK_EVERY_N_HOURS_I(BLYNK_CONCAT2(PER, __COUNTER__),N)
+
+#endif