//#include <stdint.h>
#include "soc/io_mux_reg.h" // Заголовочный файл с адресами регистров
#include "soc/gpio_reg.h" // Заголовки GPIO регистров
#define BIT(x) (1 << (x)) // Создание битовой маски
//кнопка на пине 4, светодиод на пине 2
void setup() {
// Настроить GPIO2 как выход (MCU_SEL = Function 0)
REG_WRITE(IO_MUX_GPIO2_REG, (REG_READ(IO_MUX_GPIO2_REG) & ~(7 << 12))); // Function 0 (GPIO)
//REG_CLR_BIT(IO_MUX_GPIO2_REG, (0b111 << 12));
// Включить GPIO2 как выход в GPIO_ENABLE_REG
//REG_SET_BIT(GPIO_ENABLE_REG, BIT(2));
REG_WRITE(GPIO_ENABLE_W1TS_REG, BIT(2));
// Настроить GPIO4 как вход (MCU_SEL = Function 0) + FUN_IE(бит 9)
REG_WRITE(IO_MUX_GPIO4_REG, (REG_READ(IO_MUX_GPIO4_REG) & ~(7 << 12)) | (1 << 9)); // Function 0
// Отключаем выход для GPIO4 (иначе он не будет работать как вход)
// REG_CLR_BIT(GPIO_ENABLE_REG, BIT(4)); так лучше не делать
REG_WRITE(GPIO_ENABLE_W1TC_REG, BIT(4)); // Сбрасываем бит 4, чтобы перевести в режим входа
}
void loop() {
// Считать состояние кнопки (GPIO23)
bool buttonState = REG_READ(GPIO_IN_REG) & BIT(4) ? 1 : 0;
// Установить состояние светодиода (GPIO2)
if (buttonState) {
//REG_SET_BIT(GPIO_OUT_REG, BIT(2)); // Включить светодиод
REG_WRITE(GPIO_OUT_W1TS_REG, BIT(2));
} else {
//REG_CLR_BIT(GPIO_OUT_REG, BIT(2)); // Выключить светодиод
REG_WRITE(GPIO_OUT_W1TC_REG, BIT(2));
}
}