#include <stdio.h>
#include "driver/gpio.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_log.h"
#define ledR 33
#define ledG 25
#define ledB 26
const char *tag = "Main";
#define red_delay 1000
#define green_delay 500
#define blue_delay 150
esp_err_t init_led(void);
esp_err_t create_Task(void);
#define STACK_SIZE 1024*2
void vTaskR(void *pvParameters);
void vTaskG(void *pvParameters);
void vTaskB(void *pvParameters);
void app_main() {
printf("Hello, Wokwi!\n");
init_led();
create_Task();
while (true) {
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
}
esp_err_t init_led(void){
gpio_reset_pin(ledR);
gpio_set_direction(ledR, GPIO_MODE_OUTPUT);
gpio_reset_pin(ledG);
gpio_set_direction(ledG, GPIO_MODE_OUTPUT);
gpio_reset_pin(ledB);
gpio_set_direction(ledB, GPIO_MODE_OUTPUT);
return ESP_OK;
}
esp_err_t create_Task(void){
static uint8_t ucParametersToPass;
TaskHandle_t xHandle = NULL;
xTaskCreate(
vTaskR,
"Blink R",
STACK_SIZE,
&ucParametersToPass,
1,
&xHandle
);
xTaskCreate(
vTaskG,
"Blink G",
STACK_SIZE,
&ucParametersToPass,
1,
&xHandle
);
xTaskCreate(
vTaskB,
"Blink B",
STACK_SIZE,
&ucParametersToPass,
1,
&xHandle
);
return ESP_OK;
}
void vTaskR(void *pvParameters){
while(1){
ESP_LOGI(tag, "Led R task");
gpio_set_level(ledR, 1);
vTaskDelay(pdMS_TO_TICKS(red_delay));
gpio_set_level(ledR, 0);
vTaskDelay(pdMS_TO_TICKS(red_delay));
}
}
void vTaskG(void *pvParameters){
while(1){
ESP_LOGI(tag, "Led G task");
gpio_set_level(ledG, 1);
vTaskDelay(pdMS_TO_TICKS(green_delay));
gpio_set_level(ledG, 0);
vTaskDelay(pdMS_TO_TICKS(green_delay));
}
}
void vTaskB(void *pvParameters){
while(1){
ESP_LOGI(tag, "Led B task");
gpio_set_level(ledB, 1);
vTaskDelay(pdMS_TO_TICKS(blue_delay));
gpio_set_level(ledB, 0);
vTaskDelay(pdMS_TO_TICKS(blue_delay));
}
}