#include <FreeRTOS.h>
#define BUTTON 7
#define LED 12
TimerHandle_t read_timer, write_timer;
volatile bool state;
void read_callback(TimerHandle_t xTimer) {
if (state == digitalRead(BUTTON)) {
return;
}
state = !state;
int toggle_time = (state == HIGH) ? 200 : 1000;
BaseType_t xHigherPriorityTaskWoken = pdTRUE;
xTimerChangePeriod(write_timer, pdMS_TO_TICKS(toggle_time), 0);
}
void write_callback(TimerHandle_t xTimer) {
digitalWrite(LED, !digitalRead(LED));
}
void setup() {
pinMode(BUTTON, INPUT_PULLUP);
pinMode(LED, OUTPUT);
digitalWrite(LED, LOW);
state = digitalRead(BUTTON);
read_timer = xTimerCreate("Read Timer",
pdMS_TO_TICKS(100),
pdTRUE,
nullptr,
read_callback);
write_timer = xTimerCreate("Read Timer",
pdMS_TO_TICKS(200),
pdTRUE,
nullptr,
write_callback);
if (read_timer && write_timer) {
xTimerStart(read_timer, 0);
xTimerStart(write_timer, 0);
}
}
void loop() {
delay(10000); // Nothing to see here
}
Loading
esp32-s3-devkitc-1
esp32-s3-devkitc-1