From a83dd5f2b5bde6c2b2ac846fd1d1a7cd902899da Mon Sep 17 00:00:00 2001 From: Martin Sloup Date: Fri, 17 Feb 2017 14:55:07 +0100 Subject: [PATCH] Add RepeatTimer example (#216) --- .../Timer/RepeatTimer/RepeatTimer.ino | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 libraries/ESP32/examples/Timer/RepeatTimer/RepeatTimer.ino diff --git a/libraries/ESP32/examples/Timer/RepeatTimer/RepeatTimer.ino b/libraries/ESP32/examples/Timer/RepeatTimer/RepeatTimer.ino new file mode 100644 index 00000000..4b75f6f8 --- /dev/null +++ b/libraries/ESP32/examples/Timer/RepeatTimer/RepeatTimer.ino @@ -0,0 +1,60 @@ +/* + Repeat timer example + + This example shows how to use hardware timer in ESP32. The timer calls onTimer + function every second. The timer can be stopped with button attached to PIN 0 + (IO0). + + This example code is in the public domain. + */ + +// Stop button is attached to PIN 0 (IO0) +#define BTN_STOP_ALARM 0 + +hw_timer_t * timer = NULL; + +void onTimer(){ + static unsigned int counter = 1; + + Serial.print("onTimer no. "); + Serial.print(counter); + Serial.print(" at "); + Serial.print(millis()); + Serial.println(" ms"); + + counter++; +} + +void setup() { + Serial.begin(115200); + + // Set BTN_STOP_ALARM to input mode + pinMode(BTN_STOP_ALARM, INPUT); + + // Use 1st timer of 4 (counted from zero). + // Set 80 divider for prescaler (see ESP32 Technical Reference Manual for more + // info). + timer = timerBegin(0, 80, true); + + // Attach onTimer function to our timer. + timerAttachInterrupt(timer, &onTimer, true); + + // Set alarm to call onTimer function every second (value in microseconds). + // Repeat the alarm (third parameter) + timerAlarmWrite(timer, 1000000, true); + + // Start an alarm + timerAlarmEnable(timer); +} + +void loop() { + // If button is pressed + if (digitalRead(BTN_STOP_ALARM) == LOW) { + // If timer is still running + if (timer) { + // Stop and free timer + timerEnd(timer); + timer = NULL; + } + } +}