GithubHelp home page GithubHelp logo

gkostov / asynctimer Goto Github PK

View Code? Open in Web Editor NEW

This project forked from aasim-a/asynctimer

0.0 0.0 0.0 34 KB

JavaScript-like Async timing functions (setTimeout, setInterval) for Arduino, ESP8266, ESP32 and other compatible boards

License: MIT License

C++ 100.00%

asynctimer's Introduction

AsyncTimer

arduino-library-badge GitHub release GitHub contributions welcome GitHub issues

JavaScript-like Async timing functions (setTimeout, setInterval) for Arduino, ESP8266, ESP32 and other compatible boards

Installing

Aduino IDE:

Library Manager:

The easiest way is to install it through Arduino Library manager selecting the menu:

Sketch -> Include Library -> Manage Libraries

Then type AsyncTimer into the search box and install the latest version.

Manual install:

Download the repository as .zip and include it as a new library into the IDE selecting the menu:

 Sketch -> Include Library -> Add .Zip library

PlatformIO:

Go to libraries and type AsyncTimer into the search bar and add it to your project.

Getting Started

Simply include the library into your sketch and make one instance of AsyncTimer and add the setup function to void setup() and the handler to void loop() and then start using it!

Example:

#include <AsyncTimer.h>

AsyncTimer t;

void setup()
{
  t.setup();
}

void loop()
{
  t.handle();
}

⚠NOTE⚠: only one instance must be created and it must be outside any function, as shown in the example above.

⚠NOTE⚠: The default timer capacity is 10, if you wish to increase it, you have to use non-default initializer:

AsyncTimer t(22);

API

setTimeout(callbackFunction, delayInMs)

setTimeout takes two arguments, the first one is the function to call after waiting, the second one is the time in milliseconds to wait before executing the function. It returns an unsigned short id of the timeout. If the timeout creation was unseccussfull, it returns 0. It will run only once unless canceled.

Example:

  • Using lambda function:
AsyncTimer t;

t.setTimeout([]() {
  Serial.println("Hello world!");
}, 2000);
// "Hello world!" will be printed to the Serial once after 2 seconds
  • Using normal function:
AsyncTimer t;

void functionToCall()
{
  Serial.println("Hello world!");
}

t.setTimeout(functionToCall, 2000);
// "Hello world!" will be printed to the Serial once after 2 seconds

setInterval(callbackFunction, delayInMs)

setInterval takes the same parameters as setTimeout and returns an unsigned short id of the interval, unlike setTimeout, it will keep executing the code forever unless canceled. If the interval creation was unseccussfull, it returns 0.

Example:

  • Using lambda function:
AsyncTimer t;

t.setInterval([]() {
  Serial.println("Hello world!");
}, 2000);
// "Hello world!" will be printed to the Serial every 2 seconds
  • Using normal function:
AsyncTimer t;

void functionToCall()
{
  Serial.println("Hello world!");
}

t.setInterval(functionToCall, 2000);
// "Hello world!" will be printed to the Serial every 2 seconds

changeDelay(intervalOrTimeoutId, delayInMs)

Changes the delay value of an active intervalOrTimeout.

changeDelay takes two arguments, the id returned from setTimeout or setInterval function and the new delayValue in ms, returns void.

Example:

  • Changing the delay of setInterval:
AsyncTimer t;

unsigned short intervalId = t.setInterval([]() {
  Serial.println("Hello world!");
}, 2000);

t.setTimeout([]() {
  t.changeDelay(intervalId, 3500);
  // Now the interval runs every 3500ms instead of the old 2000ms
}, 7000);

delay(intervalOrTimeoutId, delayInMs)

Delays the execution of an active intervalOrTimeout.

delay takes two arguments, the id returned from setTimeout or setInterval function and the new delayValue in ms, returns void.

Example:

  • Delaying the execution of setInterval:
AsyncTimer t;

unsigned short intervalId = t.setInterval([]() {
  Serial.println("Hello world!");
}, 2000);

t.setTimeout([]() {
  t.delay(intervalId, 3500);
  // Now the interval will be delayed by an extra 3500ms,
  // afterwords, it will continue executing normally.
}, 7000);

reset(intervalOrTimeoutId)

Resets the wait time of an active intervalOrTimeout.

delay takes one argument, the id returned from setTimeout or setInterval function, returns void.

Example:

  • Resetting the wait time of setInterval:
AsyncTimer t;

unsigned short intervalId = t.setInterval([]() {
  Serial.println("Hello world!");
}, 2000);

t.setTimeout([]() {
  t.reset(intervalId);
  // Now the interval will be reset, this means that it will
  // execute exactly 2000ms after the reset function call.
}, 7000);

cancel(intervalOrTimeoutId)

Cancels the execution of a timeout or an interval.

cancel takes one argument, the id returned from setTimeout or setInterval function and returns void.

Example:

  • Cancelling an interval:
AsyncTimer t;

unsigned short intervalId = t.setInterval([]() {
  Serial.println("Hello world!");
}, 2000);

// Cancel the interval after 7 seconds:
t.setTimeout([]() {
  t.cancel(intervalId);
}, 7000);
  • Cancelling a timeout:
AsyncTimer t;

// This timeout will never run
unsigned short timeoutId = t.setTimeout([]() {
  Serial.println("Hello world!");
}, 3000);

// Cancel the timeout before it's executed
t.cancel(timeoutId);

Limitations

  • Capturing lambda functions do not work.

Examples

  • BlinkUsingInterval - Blink led using setInterval.
  • SerialMsgUsingTimeout - Send a message to the serial monitor using setTimeout 10 seconds after booting.
  • CancelInterval - Cancel an interval using cancel.
  • CancelTimeout - Cancel a timeout using cancel.
  • DebounceUsingTimeout - Debounce button using a delay.

License

This library is licensed under MIT.

Copyright

Copyright 2021 - Aasim-A

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.