Beat and Timer
beat and timers are structures that allow for the creation of reoccuring periodic, time-based events.
Beat
void beat_event(uint8_t beat_id, uint16_t beat_counter)
void init(const uint8_t beat_id)
void set_bpm(const float beats_per_minute)
void pause()
void start()
void resume()
bool is_running()
void reset()
void set_callback(const Callback_2_UI8_UI16& callback)
beat_event:: beat event callback invoked on every beat event.set_callback:: set custom callback to a function with the signaturevoid my_beat_callback_fucntion(const uint8_t beat_id, const uint16_t beat_counter).
Timer
void   timer_event(Timer* timer)
Timer* timer_create(uint8_t timer_id)
void   timer_delete(Timer* timer)
void   timer_resume(Timer* timer)
void   timer_pause(Timer* timer)
void   timer_set_overflow(Timer* timer, uint32_t duration_us)
timer_event:: beat event callback invoked on every beat event.timer_create:: creates a timer.timer_idmust align with available hardware timer.
Example BeatAndTimer
/**
 * this example demonstrates how to use beat and timer.
*/
#include "Arduino.h"
#include "System.h"
#include "Console.h"
#include "Beat.h"
#include "Timer.h"
uint8_t counter = 0;
Beat   beat_timer;
Timer* timer;
void setup() {
    system_init();
    timer = timer_create(13);
    timer_resume(timer);
    timer_set_overflow(timer, 1000000 / 10);
    beat_timer.init(7);
    beat_timer.set_bpm(60);
    beat_timer.start();
}
void loop() {
    counter++;
    if (counter == 16) {
        beat_timer.pause();
        console_println("pausing beat");
    }
    if (counter == 32) {
        beat_timer.resume();
        counter = 0;
        console_println("resuming beat");
    }
    console_println("%02i loop", counter);
    delay(500);
}
void beat_event(const uint8_t beat_id, const uint16_t beat_counter) {
    console_println("beat: ID %i, counter %03i", beat_id, beat_counter);
}
void timer_event(Timer* timer) {
    console_println("timer: ID %i", timer->timer_id);
}