#include <Arduino.h>
#if CONFIG_FREERTOS_UNICORE
static const BaseType_t app_cpu = 0;
#else
static const BaseType_t app_cpu = 1;
#endif
// pins
static const int led_pin = 32;
static const int led_yellow = 33;
static const int led_green = 25;
static const int button = 26;
// task
void toggle_led (void *parameter) {
while (1) {
digitalWrite(led_pin, digitalRead(led_pin)^1);
vTaskDelay(500 / portTICK_PERIOD_MS);
}
}
void toggle_yellow (void *parameter) {
while (1) {
digitalWrite(led_yellow, digitalRead(led_yellow)^1);
vTaskDelay(250 / portTICK_PERIOD_MS);
}
}
void capture_button (void *parameter) {
while (1) {
if (!digitalRead(button)) {
digitalWrite(led_green, digitalRead(led_green)^1);
Serial.println("Led Toggled!");
}
vTaskDelay(150 / portTICK_PERIOD_MS);
}
}
void setup() {
Serial.begin(115200);
// Configure the pins
pinMode(led_pin, OUTPUT);
pinMode(led_yellow, OUTPUT);
pinMode(led_green, OUTPUT);
pinMode(button, INPUT);
// Task run forever
xTaskCreatePinnedToCore(
toggle_led, // Function to be called
"toggle_led", // Name of the task
1024, // Stack size (bytes in ESP32, words in FreeRTOS)
NULL, // Parameter to pass to function
1, // Task priority (0 to configMAX_PRIORITIES - 1),
NULL, // Task handle
app_cpu // Run on one core
);
xTaskCreatePinnedToCore(
toggle_yellow,
"toggle_yellow",
1024,
NULL,
2,
NULL,
app_cpu
);
xTaskCreatePinnedToCore(capture_button, "cap_btn0", 1024, NULL, 3, NULL, app_cpu);
}
void loop() {
}