diff --git a/README.md b/README.md index 8df3b4e..dba6bd5 100644 --- a/README.md +++ b/README.md @@ -42,6 +42,11 @@ The catch is **your function is now part of an ISR (Interrupt Service Routine), --- --- +### Releases v1.1.1 + +1. Add [**Change_Interval**](examples/Change_Interval) example to show how to change TimerInterval on-the-fly +2. Add Version String + ### Releases v1.1.0 1. Restore cpp code besides Impl.h code to use if Multiple-Definition linker error. @@ -64,7 +69,7 @@ The catch is **your function is now part of an ISR (Interrupt Service Routine), --- --- -## Prerequisite +## Prerequisites 1. [`Arduino IDE 1.8.13+`](https://www.arduino.cc/en/Main/Software) 2. [`ESP8266 core 2.7.4+`](https://github.com/esp8266/Arduino#installing-with-boards-manager) for ESP8266 boards. @@ -92,7 +97,7 @@ Another way to install is to: 1. Install [VS Code](https://code.visualstudio.com/) 2. Install [PlatformIO](https://platformio.org/platformio-ide) -3. Install [**ESP8266TimerInterrupt** library](https://platformio.org/lib/show/6901/ESP8266TimerInterrupt) by using [Library Manager](https://platformio.org/lib/show/6901/ESP8266TimerInterrupt/installation). Search for **ESP8266TimerInterrupt** in [Platform.io Author's Libraries](https://platformio.org/lib/search?query=author:%22Khoi%20Hoang%22) +3. Install [**ESP8266TimerInterrupt** library](https://platformio.org/lib/show/11385/ESP8266TimerInterrupt) or [**ESP8266TimerInterrupt** library](https://platformio.org/lib/show/6901/ESP8266TimerInterrupt) by using [Library Manager](https://platformio.org/lib/show/11385/ESP8266TimerInterrupt/installation). Search for **ESP8266TimerInterrupt** in [Platform.io Author's Libraries](https://platformio.org/lib/search?query=author:%22Khoi%20Hoang%22) 4. Use included [platformio.ini](platformio/platformio.ini) file from examples to ensure that all dependent libraries will installed automatically. Please visit documentation for the other options and examples at [Project Configuration File](https://docs.platformio.org/page/projectconf.html) --- @@ -188,6 +193,7 @@ Please have a look at [ESP8266TimerInterrupt Issue 8: **ESP8266Timer and PWM --> 8. [RPM_Measure](examples/RPM_Measure) 9. [SwitchDebounce](examples/SwitchDebounce) 10. [TimerInterruptTest](examples/TimerInterruptTest) +11. [**Change_Interval**](examples/Change_Interval). New. --- --- @@ -333,6 +339,7 @@ void setup() delay(200); Serial.println("\nStarting ISR_Timer_Complex on " + String(ARDUINO_BOARD)); + Serial.println(ESP8266_TIMER_INTERRUPT_VERSION); Serial.println("CPU Frequency = " + String(F_CPU / 1000000) + " MHz"); // Interval in microsecs @@ -405,6 +412,7 @@ While software timer, **programmed for 2s, is activated after 4.258s !!!** ``` Starting ISR_Timer_Complex on ESP8266_NODEMCU +ESP8266TimerInterrupt v1.1.1 CPU Frequency = 160 MHz ESP8266TimerInterrupt: _fre = 312500.00, _count = 15625 Starting ITimer OK, millis() = 64 @@ -450,6 +458,7 @@ doingSomething10s: Delta ms = 10000 ``` Starting TimerInterruptTest on ESP8266_NODEMCU +ESP8266TimerInterrupt v1.1.1 CPU Frequency = 160 MHz ESP8266TimerInterrupt: _fre = 312500.00, _count = 312500 Starting ITimer OK, millis() = 262 @@ -473,9 +482,51 @@ Delta ms = 1000 ``` +--- + +3. The following is the sample terminal output when running example [Change_Interval](examples/Change_Interval) to demonstrate how to change Timer Interval on-the-fly + +``` +Starting Change_Interval on ESP8266_NODEMCU +ESP8266TimerInterrupt v1.1.1 +CPU Frequency = 160 MHz +Starting ITimer OK, millis() = 162 +Time = 10001, TimerCount = 19 +Time = 20002, TimerCount = 39 +Changing Interval, Timer = 1000 +Time = 30003, TimerCount = 49 +Time = 40004, TimerCount = 59 +Changing Interval, Timer = 500 +Time = 50005, TimerCount = 79 +Time = 60006, TimerCount = 99 +Changing Interval, Timer = 1000 +Time = 70007, TimerCount = 109 +Time = 80008, TimerCount = 119 +Changing Interval, Timer = 500 +Time = 90009, TimerCount = 139 +Time = 100010, TimerCount = 159 +Changing Interval, Timer = 1000 +Time = 110011, TimerCount = 169 +Time = 120012, TimerCount = 179 +Changing Interval, Timer = 500 +Time = 130013, TimerCount = 199 +Time = 140014, TimerCount = 219 +Changing Interval, Timer = 1000 +Time = 150015, TimerCount = 229 +Time = 160016, TimerCount = 239 +Changing Interval, Timer = 500 +Time = 170017, TimerCount = 259 +Time = 180018, TimerCount = 279 +``` + --- --- +### Releases v1.1.1 + +1. Add [**Change_Interval**](examples/Change_Interval) example to show how to change TimerInterval on-the-fly +2. Add Version String + ### Releases v1.1.0 1. Restore cpp code besides Impl.h code to use if Multiple-Definition linker error. diff --git a/examples/Argument_None/Argument_None.ino b/examples/Argument_None/Argument_None.ino index cbd39c0..5a06215 100644 --- a/examples/Argument_None/Argument_None.ino +++ b/examples/Argument_None/Argument_None.ino @@ -23,7 +23,7 @@ Based on BlynkTimer.h Author: Volodymyr Shymanskyy - Version: 1.1.0 + Version: 1.1.1 Version Modified By Date Comments ------- ----------- ---------- ----------- @@ -32,6 +32,7 @@ 1.0.2 K.Hoang 26/11/2019 Permit up to 16 super-long-time, super-accurate ISR-based timers to avoid being blocked 1.0.3 K.Hoang 17/05/2020 Restructure code. Fix example. Enhance README. 1.1.0 K.Hoang 27/10/2020 Restore cpp code besides Impl.h code to use if Multiple-Definition linker error. + 1.1.1 K.Hoang 06/12/2020 Add Version String and Change_Interval example to show how to change TimerInterval *****************************************************************************************************************************/ /* Notes: @@ -55,7 +56,7 @@ #include "ESP8266TimerInterrupt.h" #ifndef LED_BUILTIN -#define LED_BUILTIN 2 // Pin D4 mapped to pin GPIO2/TXD1 of ESP8266, NodeMCU and WeMoS, control on-board LED + #define LED_BUILTIN 2 // Pin D4 mapped to pin GPIO2/TXD1 of ESP8266, NodeMCU and WeMoS, control on-board LED #endif volatile uint32_t lastMillis = 0; @@ -83,7 +84,7 @@ void ICACHE_RAM_ATTR TimerHandler(void) #define TIMER_INTERVAL_MS 1000 -// Init ESP32 timer 0 +// Init ESP8266Timer ESP8266Timer ITimer; @@ -95,6 +96,7 @@ void setup() delay(200); Serial.println("\nStarting Argument_None on " + String(ARDUINO_BOARD)); + Serial.println(ESP8266_TIMER_INTERRUPT_VERSION); Serial.println("CPU Frequency = " + String(F_CPU / 1000000) + " MHz"); // Interval in microsecs diff --git a/examples/Change_Interval/Change_Interval.ino b/examples/Change_Interval/Change_Interval.ino new file mode 100644 index 0000000..8f08123 --- /dev/null +++ b/examples/Change_Interval/Change_Interval.ino @@ -0,0 +1,168 @@ +/**************************************************************************************************************************** + Change_Interval.ino + For NRF52 boards using mbed-RTOS such as Nano-33-BLE + Written by Khoi Hoang + + Built by Khoi Hoang https://github.com/khoih-prog/NRF52_MBED_TimerInterrupt + Licensed under MIT license + + Now even you use all these new 16 ISR-based timers,with their maximum interval practically unlimited (limited only by + unsigned long miliseconds), you just consume only one NRF52 timer and avoid conflicting with other cores' tasks. + The accuracy is nearly perfect compared to software timers. The most important feature is they're ISR-based timers + Therefore, their executions are not blocked by bad-behaving functions / tasks. + This important feature is absolutely necessary for mission-critical tasks. + + Based on SimpleTimer - A timer library for Arduino. + Author: mromani@ottotecnica.com + Copyright (c) 2010 OTTOTECNICA Italy + + Based on BlynkTimer.h + Author: Volodymyr Shymanskyy + + Version: 1.0.2 + + Version Modified By Date Comments + ------- ----------- ---------- ----------- + 1.0.1 K Hoang 22/11/2020 Initial coding and sync with NRF52_TimerInterrupt + 1.0.2 K Hoang 23/11/2020 Add and optimize examples +*****************************************************************************************************************************/ + +/* + Notes: + Special design is necessary to share data between interrupt code and the rest of your program. + Variables usually need to be "volatile" types. Volatile tells the compiler to avoid optimizations that assume + variable can not spontaneously change. Because your function may change variables while your program is using them, + the compiler needs this hint. But volatile alone is often not enough. + When accessing shared variables, usually interrupts must be disabled. Even with volatile, + if the interrupt changes a multi-byte variable between a sequence of instructions, it can be read incorrectly. + If your data is multiple variables, such as an array and a count, usually interrupts need to be disabled + or the entire sequence of your code which accesses the data. +*/ + +#if !( ARDUINO_ARCH_NRF52840 && TARGET_NAME == ARDUINO_NANO33BLE ) + #error This code is designed to run on nRF52-based Nano-33-BLE boards using mbed-RTOS platform! Please check your Tools->Board setting. +#endif + +// These define's must be placed at the beginning before #include "NRF52TimerInterrupt.h" +// For Nano33-BLE, don't use Serial.print() in ISR as system will definitely hang. +#define NRF52_MBED_TIMER_INTERRUPT_DEBUG 0 + +#include "NRF52_MBED_TimerInterrupt.h" + +//#ifndef LED_BUILTIN +// #define LED_BUILTIN D13 +//#endif + +#ifndef LED_BLUE_PIN + #define LED_BLUE_PIN D7 +#endif + +#ifndef LED_RED_PIN + #define LED_RED_PIN D8 +#endif + +#define TIMER0_INTERVAL_MS 500 //1000 +#define TIMER1_INTERVAL_MS 2000 + +volatile uint32_t Timer0Count = 0; +volatile uint32_t Timer1Count = 0; + +// Depending on the board, you can select NRF52 Hardware Timer from NRF_TIMER_1,NRF_TIMER_3,NRF_TIMER_4 (1,3 and 4) +// If you select the already-used NRF_TIMER_0 or NRF_TIMER_2, it'll be auto modified to use NRF_TIMER_1 + +// Init NRF52 timer NRF_TIMER1 +NRF52_MBED_Timer ITimer0(NRF_TIMER_4); + +// Init NRF52 timer NRF_TIMER3 +NRF52_MBED_Timer ITimer1(NRF_TIMER_3); + +void printResult(uint32_t currTime) +{ + Serial.printf("Time = %ld, Timer0Count = %lu, , Timer1Count = %lu\n", currTime, Timer0Count, Timer1Count); +} + +void TimerHandler0(void) +{ + static bool toggle0 = false; + + // Flag for checking to be sure ISR is working as SErial.print is not OK here in ISR + Timer0Count++; + + //timer interrupt toggles pin LED_BUILTIN + digitalWrite(LED_BUILTIN, toggle0); + toggle0 = !toggle0; +} + +void TimerHandler1(void) +{ + static bool toggle1 = false; + + // Flag for checking to be sure ISR is working as Serial.print is not OK here in ISR + Timer1Count++; + + //timer interrupt toggles outputPin + digitalWrite(LED_BLUE_PIN, toggle1); + toggle1 = !toggle1; +} + +void setup() +{ + pinMode(LED_BUILTIN, OUTPUT); + pinMode(LED_BLUE_PIN, OUTPUT); + + Serial.begin(115200); + while (!Serial); + + delay(100); + + Serial.printf("\nStarting Change_Interval on %s\n", BOARD_NAME); + Serial.printf("Version : v%s\n", NRF52_MBED_TIMER_INTERRUPT_VERSION); + + // Interval in microsecs + if (ITimer0.attachInterruptInterval(TIMER0_INTERVAL_MS * 1000, TimerHandler0)) + { + Serial.printf("Starting ITimer0 OK, millis() = %ld\n", millis()); + } + else + Serial.println("Can't set ITimer0. Select another freq. or timer"); + + // Interval in microsecs + if (ITimer1.attachInterruptInterval(TIMER1_INTERVAL_MS * 1000, TimerHandler1)) + { + Serial.printf("Starting ITimer1 OK, millis() = %ld\n", millis()); + } + else + Serial.println("Can't set ITimer1. Select another freq. or timer"); +} + +#define CHECK_INTERVAL_MS 10000L +#define CHANGE_INTERVAL_MS 20000L + +void loop() +{ + static uint32_t lastTime = 0; + static uint32_t lastChangeTime = 0; + static uint32_t currTime; + static uint32_t multFactor = 0; + + currTime = millis(); + + if (currTime - lastTime > CHECK_INTERVAL_MS) + { + printResult(currTime); + lastTime = currTime; + + if (currTime - lastChangeTime > CHANGE_INTERVAL_MS) + { + //setInterval(unsigned long interval, timerCallback callback) + multFactor = (multFactor + 1) % 2; + + ITimer0.setInterval(TIMER0_INTERVAL_MS * 1000 * (multFactor + 1), TimerHandler0); + ITimer1.setInterval(TIMER1_INTERVAL_MS * 1000 * (multFactor + 1), TimerHandler1); + + Serial.printf("Changing Interval, Timer0 = %lu, Timer1 = %lu\n", TIMER0_INTERVAL_MS * (multFactor + 1), TIMER1_INTERVAL_MS * (multFactor + 1)); + + lastChangeTime = currTime; + } + } +} diff --git a/examples/ISR_RPM_Measure/ISR_RPM_Measure.ino b/examples/ISR_RPM_Measure/ISR_RPM_Measure.ino index 54b96aa..0e883da 100644 --- a/examples/ISR_RPM_Measure/ISR_RPM_Measure.ino +++ b/examples/ISR_RPM_Measure/ISR_RPM_Measure.ino @@ -23,7 +23,7 @@ Based on BlynkTimer.h Author: Volodymyr Shymanskyy - Version: 1.1.0 + Version: 1.1.1 Version Modified By Date Comments ------- ----------- ---------- ----------- @@ -32,6 +32,7 @@ 1.0.2 K.Hoang 26/11/2019 Permit up to 16 super-long-time, super-accurate ISR-based timers to avoid being blocked 1.0.3 K.Hoang 17/05/2020 Restructure code. Fix example. Enhance README. 1.1.0 K.Hoang 27/10/2020 Restore cpp code besides Impl.h code to use if Multiple-Definition linker error. + 1.1.1 K.Hoang 06/12/2020 Add Version String and Change_Interval example to show how to change TimerInterval *****************************************************************************************************************************/ /* Notes: @@ -143,6 +144,7 @@ void setup() delay(200); Serial.println("\nStarting ISR_RPM_Measure on " + String(ARDUINO_BOARD)); + Serial.println(ESP8266_TIMER_INTERRUPT_VERSION); Serial.println("CPU Frequency = " + String(F_CPU / 1000000) + " MHz"); // Interval in microsecs diff --git a/examples/ISR_Switch/ISR_Switch.ino b/examples/ISR_Switch/ISR_Switch.ino index e3db029..0196558 100644 --- a/examples/ISR_Switch/ISR_Switch.ino +++ b/examples/ISR_Switch/ISR_Switch.ino @@ -23,7 +23,7 @@ Based on BlynkTimer.h Author: Volodymyr Shymanskyy - Version: 1.1.0 + Version: 1.1.1 Version Modified By Date Comments ------- ----------- ---------- ----------- @@ -32,6 +32,7 @@ 1.0.2 K.Hoang 26/11/2019 Permit up to 16 super-long-time, super-accurate ISR-based timers to avoid being blocked 1.0.3 K.Hoang 17/05/2020 Restructure code. Fix example. Enhance README. 1.1.0 K.Hoang 27/10/2020 Restore cpp code besides Impl.h code to use if Multiple-Definition linker error. + 1.1.1 K.Hoang 06/12/2020 Add Version String and Change_Interval example to show how to change TimerInterval *****************************************************************************************************************************/ /* Notes: Special design is necessary to share data between interrupt code and the rest of your program. @@ -87,9 +88,11 @@ char auth[] = "****"; char ssid[] = "****"; char pass[] = "****"; -// These define's must be placed at the beginning before #include "ESP8266TimerInterrupt.h" -// Don't define TIMER_INTERRUPT_DEBUG > 2. Only for special ISR debugging only. Can hang the system. -#define TIMER_INTERRUPT_DEBUG 1 +//These define's must be placed at the beginning before #include "ESP8266TimerInterrupt.h" +// Don't define TIMER_INTERRUPT_DEBUG > 0. Only for special ISR debugging only. Can hang the system. +#define TIMER_INTERRUPT_DEBUG 0 + +#include "ESP8266TimerInterrupt.h" #define DEBOUNCE_TIME 25 #define LONG_BUTTON_PRESS_TIME_MS 100 @@ -252,6 +255,7 @@ void setup() delay(200); Serial.println("\nStarting ISR_Switch on " + String(ARDUINO_BOARD)); + Serial.println(ESP8266_TIMER_INTERRUPT_VERSION); Serial.println("CPU Frequency = " + String(F_CPU / 1000000) + " MHz"); LampState = false; diff --git a/examples/ISR_Timer_4_Switches/ISR_Timer_4_Switches.ino b/examples/ISR_Timer_4_Switches/ISR_Timer_4_Switches.ino index 6e0ed83..a370853 100644 --- a/examples/ISR_Timer_4_Switches/ISR_Timer_4_Switches.ino +++ b/examples/ISR_Timer_4_Switches/ISR_Timer_4_Switches.ino @@ -23,7 +23,7 @@ Based on BlynkTimer.h Author: Volodymyr Shymanskyy - Version: 1.1.0 + Version: 1.1.1 Version Modified By Date Comments ------- ----------- ---------- ----------- @@ -32,6 +32,7 @@ 1.0.2 K.Hoang 26/11/2019 Permit up to 16 super-long-time, super-accurate ISR-based timers to avoid being blocked 1.0.3 K.Hoang 17/05/2020 Restructure code. Fix example. Enhance README. 1.1.0 K.Hoang 27/10/2020 Restore cpp code besides Impl.h code to use if Multiple-Definition linker error. + 1.1.1 K.Hoang 06/12/2020 Add Version String and Change_Interval example to show how to change TimerInterval *****************************************************************************************************************************/ /* Notes: Special design is necessary to share data between interrupt code and the rest of your program. @@ -471,6 +472,7 @@ void setup() delay(200); Serial.println("\nStarting ISR_Timer_4_Switches on " + String(ARDUINO_BOARD)); + Serial.println(ESP8266_TIMER_INTERRUPT_VERSION); Serial.println("CPU Frequency = " + String(F_CPU / 1000000) + " MHz"); for (int index = 0; index < NUMBER_OF_LAMPS; index++) diff --git a/examples/ISR_Timer_Complex/ISR_Timer_Complex.ino b/examples/ISR_Timer_Complex/ISR_Timer_Complex.ino index 074814c..c7e1399 100644 --- a/examples/ISR_Timer_Complex/ISR_Timer_Complex.ino +++ b/examples/ISR_Timer_Complex/ISR_Timer_Complex.ino @@ -23,7 +23,7 @@ Based on BlynkTimer.h Author: Volodymyr Shymanskyy - Version: 1.1.0 + Version: 1.1.1 Version Modified By Date Comments ------- ----------- ---------- ----------- @@ -32,6 +32,7 @@ 1.0.2 K.Hoang 26/11/2019 Permit up to 16 super-long-time, super-accurate ISR-based timers to avoid being blocked 1.0.3 K.Hoang 17/05/2020 Restructure code. Fix example. Enhance README. 1.1.0 K.Hoang 27/10/2020 Restore cpp code besides Impl.h code to use if Multiple-Definition linker error. + 1.1.1 K.Hoang 06/12/2020 Add Version String and Change_Interval example to show how to change TimerInterval *****************************************************************************************************************************/ /* Notes: Special design is necessary to share data between interrupt code and the rest of your program. @@ -192,6 +193,7 @@ void setup() delay(200); Serial.println("\nStarting ISR_Timer_Complex on " + String(ARDUINO_BOARD)); + Serial.println(ESP8266_TIMER_INTERRUPT_VERSION); Serial.println("CPU Frequency = " + String(F_CPU / 1000000) + " MHz"); // Interval in microsecs diff --git a/examples/ISR_Timer_Switch/ISR_Timer_Switch.ino b/examples/ISR_Timer_Switch/ISR_Timer_Switch.ino index 84df0bd..4052364 100644 --- a/examples/ISR_Timer_Switch/ISR_Timer_Switch.ino +++ b/examples/ISR_Timer_Switch/ISR_Timer_Switch.ino @@ -23,7 +23,7 @@ Based on BlynkTimer.h Author: Volodymyr Shymanskyy - Version: 1.1.0 + Version: 1.1.1 Version Modified By Date Comments ------- ----------- ---------- ----------- @@ -32,6 +32,7 @@ 1.0.2 K.Hoang 26/11/2019 Permit up to 16 super-long-time, super-accurate ISR-based timers to avoid being blocked 1.0.3 K.Hoang 17/05/2020 Restructure code. Fix example. Enhance README. 1.1.0 K.Hoang 27/10/2020 Restore cpp code besides Impl.h code to use if Multiple-Definition linker error. + 1.1.1 K.Hoang 06/12/2020 Add Version String and Change_Interval example to show how to change TimerInterval *****************************************************************************************************************************/ /* Notes: Special design is necessary to share data between interrupt code and the rest of your program. @@ -277,6 +278,7 @@ void setup() delay(200); Serial.println("\nStarting ISR_Timer_Switch on " + String(ARDUINO_BOARD)); + Serial.println(ESP8266_TIMER_INTERRUPT_VERSION); Serial.println("CPU Frequency = " + String(F_CPU / 1000000) + " MHz"); pinMode(RELAY_PIN, OUTPUT); diff --git a/examples/ISR_Timer_Switches/ISR_Timer_Switches.ino b/examples/ISR_Timer_Switches/ISR_Timer_Switches.ino index ea9ea7c..438fd2f 100644 --- a/examples/ISR_Timer_Switches/ISR_Timer_Switches.ino +++ b/examples/ISR_Timer_Switches/ISR_Timer_Switches.ino @@ -23,7 +23,7 @@ Based on BlynkTimer.h Author: Volodymyr Shymanskyy - Version: 1.1.0 + Version: 1.1.1 Version Modified By Date Comments ------- ----------- ---------- ----------- @@ -32,6 +32,7 @@ 1.0.2 K.Hoang 26/11/2019 Permit up to 16 super-long-time, super-accurate ISR-based timers to avoid being blocked 1.0.3 K.Hoang 17/05/2020 Restructure code. Fix example. Enhance README. 1.1.0 K.Hoang 27/10/2020 Restore cpp code besides Impl.h code to use if Multiple-Definition linker error. + 1.1.1 K.Hoang 06/12/2020 Add Version String and Change_Interval example to show how to change TimerInterval *****************************************************************************************************************************/ /* Notes: Special design is necessary to share data between interrupt code and the rest of your program. @@ -415,9 +416,9 @@ void setup() delay(200); Serial.println("\nStarting ISR_Timer_Switches on " + String(ARDUINO_BOARD)); + Serial.println(ESP8266_TIMER_INTERRUPT_VERSION); Serial.println("CPU Frequency = " + String(F_CPU / 1000000) + " MHz"); - attachInterrupt(digitalPinToInterrupt(BUTTON_PIN), Falling, FALLING); attachInterrupt(digitalPinToInterrupt(BUTTON2_PIN), Falling2, FALLING); diff --git a/examples/RPM_Measure/RPM_Measure.ino b/examples/RPM_Measure/RPM_Measure.ino index c5b95dd..725966b 100644 --- a/examples/RPM_Measure/RPM_Measure.ino +++ b/examples/RPM_Measure/RPM_Measure.ino @@ -23,7 +23,7 @@ Based on BlynkTimer.h Author: Volodymyr Shymanskyy - Version: 1.1.0 + Version: 1.1.1 Version Modified By Date Comments ------- ----------- ---------- ----------- @@ -32,6 +32,7 @@ 1.0.2 K.Hoang 26/11/2019 Permit up to 16 super-long-time, super-accurate ISR-based timers to avoid being blocked 1.0.3 K.Hoang 17/05/2020 Restructure code. Fix example. Enhance README. 1.1.0 K.Hoang 27/10/2020 Restore cpp code besides Impl.h code to use if Multiple-Definition linker error. + 1.1.1 K.Hoang 06/12/2020 Add Version String and Change_Interval example to show how to change TimerInterval *****************************************************************************************************************************/ /* Notes: @@ -131,6 +132,7 @@ void setup() delay(200); Serial.println("\nStarting RPM_Measure on " + String(ARDUINO_BOARD)); + Serial.println(ESP8266_TIMER_INTERRUPT_VERSION); Serial.println("CPU Frequency = " + String(F_CPU / 1000000) + " MHz"); // Interval in microsecs diff --git a/examples/SwitchDebounce/SwitchDebounce.ino b/examples/SwitchDebounce/SwitchDebounce.ino index daff151..f3a238b 100644 --- a/examples/SwitchDebounce/SwitchDebounce.ino +++ b/examples/SwitchDebounce/SwitchDebounce.ino @@ -23,7 +23,7 @@ Based on BlynkTimer.h Author: Volodymyr Shymanskyy - Version: 1.1.0 + Version: 1.1.1 Version Modified By Date Comments ------- ----------- ---------- ----------- @@ -32,6 +32,7 @@ 1.0.2 K.Hoang 26/11/2019 Permit up to 16 super-long-time, super-accurate ISR-based timers to avoid being blocked 1.0.3 K.Hoang 17/05/2020 Restructure code. Fix example. Enhance README. 1.1.0 K.Hoang 27/10/2020 Restore cpp code besides Impl.h code to use if Multiple-Definition linker error. + 1.1.1 K.Hoang 06/12/2020 Add Version String and Change_Interval example to show how to change TimerInterval *****************************************************************************************************************************/ /* Notes: Special design is necessary to share data between interrupt code and the rest of your program. @@ -169,6 +170,7 @@ void setup() delay(200); Serial.println("\nStarting SwitchDebounce on " + String(ARDUINO_BOARD)); + Serial.println(ESP8266_TIMER_INTERRUPT_VERSION); Serial.println("CPU Frequency = " + String(F_CPU / 1000000) + " MHz"); // Interval in microsecs diff --git a/examples/TimerInterruptTest/TimerInterruptTest.ino b/examples/TimerInterruptTest/TimerInterruptTest.ino index 4dd9fb3..f222acb 100644 --- a/examples/TimerInterruptTest/TimerInterruptTest.ino +++ b/examples/TimerInterruptTest/TimerInterruptTest.ino @@ -23,7 +23,7 @@ Based on BlynkTimer.h Author: Volodymyr Shymanskyy - Version: 1.1.0 + Version: 1.1.1 Version Modified By Date Comments ------- ----------- ---------- ----------- @@ -32,6 +32,7 @@ 1.0.2 K.Hoang 26/11/2019 Permit up to 16 super-long-time, super-accurate ISR-based timers to avoid being blocked 1.0.3 K.Hoang 17/05/2020 Restructure code. Fix example. Enhance README. 1.1.0 K.Hoang 27/10/2020 Restore cpp code besides Impl.h code to use if Multiple-Definition linker error. + 1.1.1 K.Hoang 06/12/2020 Add Version String and Change_Interval example to show how to change TimerInterval *****************************************************************************************************************************/ /* Notes: Special design is necessary to share data between interrupt code and the rest of your program. @@ -95,6 +96,7 @@ void setup() delay(200); Serial.println("\nStarting TimerInterruptTest on " + String(ARDUINO_BOARD)); + Serial.println(ESP8266_TIMER_INTERRUPT_VERSION); Serial.println("CPU Frequency = " + String(F_CPU / 1000000) + " MHz"); // Interval in microsecs diff --git a/library.json b/library.json index c5b8cca..78eeee6 100644 --- a/library.json +++ b/library.json @@ -1,7 +1,7 @@ { "name": "ESP8266TimerInterrupt", - "version": "1.1.0", - "keywords": "Timing,Device,Control,timer,interrupt,hardware,ESP8266,mission-critical,precise,non-blocking", + "version": "1.1.1", + "keywords": "timing,device,control,timer,interrupt,hardware,esp8266,mission-critical,precise,non-blocking,isr", "description": "This library enables you to use Interrupt from Hardware Timers on an ESP8266-based board. These hardware timers, using interrupt, still work even if other functions are blocking. Moreover, they are much more precise (certainly depending on clock frequency accuracy) than other software timers using millis() or micros(). That's necessary if you need to measure some data requiring better accuracy.", "authors": { @@ -23,7 +23,7 @@ ] }, "frameworks": "*", - "platforms": "esp8266", + "platforms": "espressif8266", "examples": "examples/*/*/*.ino", "license": "MIT" } diff --git a/library.properties b/library.properties index 03601e1..10e67d3 100644 --- a/library.properties +++ b/library.properties @@ -1,5 +1,5 @@ name=ESP8266TimerInterrupt -version=1.1.0 +version=1.1.1 author=Khoi Hoang maintainer=Khoi Hoang sentence=This library enables you to use Interrupt from Hardware Timers on an ESP8266-based board. diff --git a/src/ESP8266TimerInterrupt.h b/src/ESP8266TimerInterrupt.h index c5961a4..2e992b3 100644 --- a/src/ESP8266TimerInterrupt.h +++ b/src/ESP8266TimerInterrupt.h @@ -23,7 +23,7 @@ Based on BlynkTimer.h Author: Volodymyr Shymanskyy - Version: 1.1.0 + Version: 1.1.1 Version Modified By Date Comments ------- ----------- ---------- ----------- @@ -32,6 +32,7 @@ 1.0.2 K.Hoang 26/11/2019 Permit up to 16 super-long-time, super-accurate ISR-based timers to avoid being blocked 1.0.3 K.Hoang 17/05/2020 Restructure code. Fix example. Enhance README. 1.1.0 K.Hoang 27/10/2020 Restore cpp code besides Impl.h code to use if Multiple-Definition linker error. + 1.1.1 K.Hoang 06/12/2020 Add Version String and Change_Interval example to show how to change TimerInterval *****************************************************************************************************************************/ #pragma once @@ -40,8 +41,10 @@ #error This code is designed to run on ESP8266 and ESP8266-based boards! Please check your Tools->Board setting. #endif +#define ESP8266_TIMER_INTERRUPT_VERSION "ESP8266TimerInterrupt v1.1.1" + #ifndef TIMER_INTERRUPT_DEBUG -#define TIMER_INTERRUPT_DEBUG 0 + #define TIMER_INTERRUPT_DEBUG 0 #endif diff --git a/src/ESP8266_ISR_Timer-Impl.h b/src/ESP8266_ISR_Timer-Impl.h index 17a66ae..4c840fe 100644 --- a/src/ESP8266_ISR_Timer-Impl.h +++ b/src/ESP8266_ISR_Timer-Impl.h @@ -23,7 +23,7 @@ Based on BlynkTimer.h Author: Volodymyr Shymanskyy - Version: 1.1.0 + Version: 1.1.1 Version Modified By Date Comments ------- ----------- ---------- ----------- @@ -32,6 +32,7 @@ 1.0.2 K.Hoang 26/11/2019 Permit up to 16 super-long-time, super-accurate ISR-based timers to avoid being blocked 1.0.3 K.Hoang 17/05/2020 Restructure code. Fix example. Enhance README. 1.1.0 K.Hoang 27/10/2020 Restore cpp code besides Impl.h code to use if Multiple-Definition linker error. + 1.1.1 K.Hoang 06/12/2020 Add Version String and Change_Interval example to show how to change TimerInterval *****************************************************************************************************************************/ #pragma once diff --git a/src/ESP8266_ISR_Timer.h b/src/ESP8266_ISR_Timer.h index a88f133..5936b32 100644 --- a/src/ESP8266_ISR_Timer.h +++ b/src/ESP8266_ISR_Timer.h @@ -23,7 +23,7 @@ Based on BlynkTimer.h Author: Volodymyr Shymanskyy - Version: 1.1.0 + Version: 1.1.1 Version Modified By Date Comments ------- ----------- ---------- ----------- @@ -32,6 +32,7 @@ 1.0.2 K.Hoang 26/11/2019 Permit up to 16 super-long-time, super-accurate ISR-based timers to avoid being blocked 1.0.3 K.Hoang 17/05/2020 Restructure code. Fix example. Enhance README. 1.1.0 K.Hoang 27/10/2020 Restore cpp code besides Impl.h code to use if Multiple-Definition linker error. + 1.1.1 K.Hoang 06/12/2020 Add Version String and Change_Interval example to show how to change TimerInterval *****************************************************************************************************************************/ #pragma once diff --git a/src_cpp/ESP8266TimerInterrupt.h b/src_cpp/ESP8266TimerInterrupt.h index c5961a4..2e992b3 100644 --- a/src_cpp/ESP8266TimerInterrupt.h +++ b/src_cpp/ESP8266TimerInterrupt.h @@ -23,7 +23,7 @@ Based on BlynkTimer.h Author: Volodymyr Shymanskyy - Version: 1.1.0 + Version: 1.1.1 Version Modified By Date Comments ------- ----------- ---------- ----------- @@ -32,6 +32,7 @@ 1.0.2 K.Hoang 26/11/2019 Permit up to 16 super-long-time, super-accurate ISR-based timers to avoid being blocked 1.0.3 K.Hoang 17/05/2020 Restructure code. Fix example. Enhance README. 1.1.0 K.Hoang 27/10/2020 Restore cpp code besides Impl.h code to use if Multiple-Definition linker error. + 1.1.1 K.Hoang 06/12/2020 Add Version String and Change_Interval example to show how to change TimerInterval *****************************************************************************************************************************/ #pragma once @@ -40,8 +41,10 @@ #error This code is designed to run on ESP8266 and ESP8266-based boards! Please check your Tools->Board setting. #endif +#define ESP8266_TIMER_INTERRUPT_VERSION "ESP8266TimerInterrupt v1.1.1" + #ifndef TIMER_INTERRUPT_DEBUG -#define TIMER_INTERRUPT_DEBUG 0 + #define TIMER_INTERRUPT_DEBUG 0 #endif diff --git a/src_cpp/ESP8266_ISR_Timer.cpp b/src_cpp/ESP8266_ISR_Timer.cpp index a27c170..8924d9e 100644 --- a/src_cpp/ESP8266_ISR_Timer.cpp +++ b/src_cpp/ESP8266_ISR_Timer.cpp @@ -23,7 +23,7 @@ Based on BlynkTimer.h Author: Volodymyr Shymanskyy - Version: 1.1.0 + Version: 1.1.1 Version Modified By Date Comments ------- ----------- ---------- ----------- @@ -32,6 +32,7 @@ 1.0.2 K.Hoang 26/11/2019 Permit up to 16 super-long-time, super-accurate ISR-based timers to avoid being blocked 1.0.3 K.Hoang 17/05/2020 Restructure code. Fix example. Enhance README. 1.1.0 K.Hoang 27/10/2020 Restore cpp code besides Impl.h code to use if Multiple-Definition linker error. + 1.1.1 K.Hoang 06/12/2020 Add Version String and Change_Interval example to show how to change TimerInterval *****************************************************************************************************************************/ #if !defined(ESP8266) diff --git a/src_cpp/ESP8266_ISR_Timer.h b/src_cpp/ESP8266_ISR_Timer.h index bfb20e0..ae75115 100644 --- a/src_cpp/ESP8266_ISR_Timer.h +++ b/src_cpp/ESP8266_ISR_Timer.h @@ -23,7 +23,7 @@ Based on BlynkTimer.h Author: Volodymyr Shymanskyy - Version: 1.1.0 + Version: 1.1.1 Version Modified By Date Comments ------- ----------- ---------- ----------- @@ -32,6 +32,7 @@ 1.0.2 K.Hoang 26/11/2019 Permit up to 16 super-long-time, super-accurate ISR-based timers to avoid being blocked 1.0.3 K.Hoang 17/05/2020 Restructure code. Fix example. Enhance README. 1.1.0 K.Hoang 27/10/2020 Restore cpp code besides Impl.h code to use if Multiple-Definition linker error. + 1.1.1 K.Hoang 06/12/2020 Add Version String and Change_Interval example to show how to change TimerInterval *****************************************************************************************************************************/ #pragma once diff --git a/src_h/ESP8266TimerInterrupt.h b/src_h/ESP8266TimerInterrupt.h index c5961a4..2e992b3 100644 --- a/src_h/ESP8266TimerInterrupt.h +++ b/src_h/ESP8266TimerInterrupt.h @@ -23,7 +23,7 @@ Based on BlynkTimer.h Author: Volodymyr Shymanskyy - Version: 1.1.0 + Version: 1.1.1 Version Modified By Date Comments ------- ----------- ---------- ----------- @@ -32,6 +32,7 @@ 1.0.2 K.Hoang 26/11/2019 Permit up to 16 super-long-time, super-accurate ISR-based timers to avoid being blocked 1.0.3 K.Hoang 17/05/2020 Restructure code. Fix example. Enhance README. 1.1.0 K.Hoang 27/10/2020 Restore cpp code besides Impl.h code to use if Multiple-Definition linker error. + 1.1.1 K.Hoang 06/12/2020 Add Version String and Change_Interval example to show how to change TimerInterval *****************************************************************************************************************************/ #pragma once @@ -40,8 +41,10 @@ #error This code is designed to run on ESP8266 and ESP8266-based boards! Please check your Tools->Board setting. #endif +#define ESP8266_TIMER_INTERRUPT_VERSION "ESP8266TimerInterrupt v1.1.1" + #ifndef TIMER_INTERRUPT_DEBUG -#define TIMER_INTERRUPT_DEBUG 0 + #define TIMER_INTERRUPT_DEBUG 0 #endif diff --git a/src_h/ESP8266_ISR_Timer-Impl.h b/src_h/ESP8266_ISR_Timer-Impl.h index 17a66ae..4c840fe 100644 --- a/src_h/ESP8266_ISR_Timer-Impl.h +++ b/src_h/ESP8266_ISR_Timer-Impl.h @@ -23,7 +23,7 @@ Based on BlynkTimer.h Author: Volodymyr Shymanskyy - Version: 1.1.0 + Version: 1.1.1 Version Modified By Date Comments ------- ----------- ---------- ----------- @@ -32,6 +32,7 @@ 1.0.2 K.Hoang 26/11/2019 Permit up to 16 super-long-time, super-accurate ISR-based timers to avoid being blocked 1.0.3 K.Hoang 17/05/2020 Restructure code. Fix example. Enhance README. 1.1.0 K.Hoang 27/10/2020 Restore cpp code besides Impl.h code to use if Multiple-Definition linker error. + 1.1.1 K.Hoang 06/12/2020 Add Version String and Change_Interval example to show how to change TimerInterval *****************************************************************************************************************************/ #pragma once diff --git a/src_h/ESP8266_ISR_Timer.h b/src_h/ESP8266_ISR_Timer.h index a88f133..5936b32 100644 --- a/src_h/ESP8266_ISR_Timer.h +++ b/src_h/ESP8266_ISR_Timer.h @@ -23,7 +23,7 @@ Based on BlynkTimer.h Author: Volodymyr Shymanskyy - Version: 1.1.0 + Version: 1.1.1 Version Modified By Date Comments ------- ----------- ---------- ----------- @@ -32,6 +32,7 @@ 1.0.2 K.Hoang 26/11/2019 Permit up to 16 super-long-time, super-accurate ISR-based timers to avoid being blocked 1.0.3 K.Hoang 17/05/2020 Restructure code. Fix example. Enhance README. 1.1.0 K.Hoang 27/10/2020 Restore cpp code besides Impl.h code to use if Multiple-Definition linker error. + 1.1.1 K.Hoang 06/12/2020 Add Version String and Change_Interval example to show how to change TimerInterval *****************************************************************************************************************************/ #pragma once