#include <esp_log.h>
#include <driver/gpio.h>
#include <freertos/FreeRTOS.h>
#include <freertos/task.h>

static const char *TAG = "wokwi-example";

#define LED_GPIO GPIO_NUM_15
#define LED_GPIO2 GPIO_NUM_2
#define LED_GPIO4 GPIO_NUM_4
#define LED_GPIO5 GPIO_NUM_5
#define LED_GPIO18 GPIO_NUM_18

void blink_task(void *pvParameter)
{
    gpio_pad_select_gpio(LED_GPIO);
    gpio_pad_select_gpio(LED_GPIO2);
    gpio_pad_select_gpio(LED_GPIO4);
    gpio_pad_select_gpio(LED_GPIO5);
    gpio_pad_select_gpio(LED_GPIO18);
    gpio_set_direction(LED_GPIO, GPIO_MODE_OUTPUT);
    gpio_set_direction(LED_GPIO2, GPIO_MODE_OUTPUT);
    gpio_set_direction(LED_GPIO4, GPIO_MODE_OUTPUT);
    gpio_set_direction(LED_GPIO5, GPIO_MODE_OUTPUT);
    gpio_set_direction(LED_GPIO18, GPIO_MODE_OUTPUT);

    while (1) {
        gpio_set_level(LED_GPIO, 1);
        vTaskDelay(1000 / portTICK_PERIOD_MS);
        gpio_set_level(LED_GPIO, 0);
        vTaskDelay(1000 / portTICK_PERIOD_MS);
        gpio_set_level(LED_GPIO2, 1);
        vTaskDelay(1000 / portTICK_PERIOD_MS);
        gpio_set_level(LED_GPIO2, 0);
        vTaskDelay(1000 / portTICK_PERIOD_MS);
        gpio_set_level(LED_GPIO4, 1);
        vTaskDelay(1000 / portTICK_PERIOD_MS);
        gpio_set_level(LED_GPIO4, 0);
        vTaskDelay(1000 / portTICK_PERIOD_MS);
        gpio_set_level(LED_GPIO5, 1);
        vTaskDelay(1000 / portTICK_PERIOD_MS);
        gpio_set_level(LED_GPIO5, 0);
        vTaskDelay(1000 / portTICK_PERIOD_MS);
        gpio_set_level(LED_GPIO18, 1);
        vTaskDelay(1000 / portTICK_PERIOD_MS);
        gpio_set_level(LED_GPIO18, 0);
        vTaskDelay(1000 / portTICK_PERIOD_MS);
    }
}

void app_main()
{
    xTaskCreate(&blink_task, "blink_task", configMINIMAL_STACK_SIZE, NULL, 5, NULL);
}