#include <stdio.h>
#include "driver/gpio.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#define LED_GPIO GPIO_NUM_2
#define BTN_GPIO GPIO_NUM_3
void app_main(void)
{
gpio_reset_pin(LED_GPIO);
gpio_set_direction(LED_GPIO, GPIO_MODE_OUTPUT);
gpio_reset_pin(BTN_GPIO);
gpio_set_direction(BTN_GPIO, GPIO_MODE_INPUT);
gpio_pullup_en(BTN_GPIO);
int last_btn_state = 1;
int led_mode = 0;
int led_state = 0;
while (1)
{
// читаем кнопку
int btn_state = gpio_get_level(BTN_GPIO);
// переход 1 -> 0 (нажали)
if (btn_state == 0 && last_btn_state == 1) {
led_mode = !led_mode; // переключение режима
vTaskDelay(pdMS_TO_TICKS(50)); // антидребезг
}
last_btn_state = btn_state;
if (led_mode) {
// мигание
led_state = !led_state;
gpio_set_level(LED_GPIO, led_state);
} else {
// всегда выкл
gpio_set_level(LED_GPIO, 0);
led_state = 0;
}
vTaskDelay(pdMS_TO_TICKS(300)); // общая пауза
}
}