#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"
#define BUTTON GPIO_NUM_27
#define LED GPIO_NUM_12
esp_timer_handle_t read_timer, write_timer;
volatile bool state;
void write_timer_callback(void* arg)
{
gpio_set_level(LED, !gpio_get_level(LED));
}
void read_timer_callback(void* arg)
{
if (state == gpio_get_level(BUTTON))
return;
state = !state;
esp_timer_stop(write_timer);
esp_timer_start_periodic(write_timer, (state == HIGH) ? 200000 : 1000000);
}
extern "C" void app_main(void)
{
gpio_reset_pin(BUTTON);
gpio_reset_pin(LED);
gpio_set_direction(BUTTON, GPIO_MODE_INPUT);
gpio_set_pull_mode(BUTTON, GPIO_PULLUP_ONLY);
gpio_set_direction(LED, GPIO_MODE_INPUT_OUTPUT);
gpio_set_level(LED, 0);
state = 0;
// WRITE Timer
const esp_timer_create_args_t write_timer_args = {
.callback = &write_timer_callback,
.name = "My write timer"
};
esp_timer_create(&write_timer_args, &write_timer);
esp_timer_start_periodic(write_timer, 200000); // time in us
// READ timer
const esp_timer_create_args_t read_timer_args = {
.callback = &read_timer_callback,
.name = "My read timer"
};
esp_timer_create(&read_timer_args, &read_timer);
esp_timer_start_periodic(read_timer, 100000); // time in us
// Notice : no while loop !
}