ESP32-S3用C语言实现gpio输入触发操作
时间: 2023-07-18 22:03:00 浏览: 177
基于C语言的GPIO编程
5星 · 资源好评率100%
使用C语言实现ESP32-S3的GPIO输入触发操作,可以参考以下代码:
```
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"
#define BUTTON_PIN GPIO_NUM_4
#define LED_PIN GPIO_NUM_5
void button_task(void *arg)
{
gpio_pad_select_gpio(BUTTON_PIN);
gpio_set_direction(BUTTON_PIN, GPIO_MODE_INPUT);
gpio_set_pull_mode(BUTTON_PIN, GPIO_PULLUP_ONLY);
while(1) {
if(gpio_get_level(BUTTON_PIN) == 0) { // 检测到按键按下
gpio_set_level(LED_PIN, 1); // 点亮LED
}
else {
gpio_set_level(LED_PIN, 0); // 熄灭LED
}
vTaskDelay(10 / portTICK_RATE_MS); // 延时10ms
}
}
void app_main()
{
gpio_pad_select_gpio(LED_PIN);
gpio_set_direction(LED_PIN, GPIO_MODE_OUTPUT);
gpio_set_level(LED_PIN, 0);
xTaskCreate(button_task, "button_task", 2048, NULL, 10, NULL);
}
```
这是一个简单的示例,其中使用GPIO4作为输入引脚,GPIO5作为输出引脚。在循环中检测GPIO4的电平,当电平为低时,开启GPIO5的输出,点亮LED;当电平为高时,关闭GPIO5的输出,熄灭LED。使用vTaskDelay函数进行延时,避免过于频繁地读取GPIO4的电平。
需要注意的是,使用GPIO作为输入时,需要设置引脚的上拉或下拉电阻,避免因为电平漂移等原因导致误触发。在本例中,使用了GPIO_PULLUP_ONLY模式,即开启上拉电阻。
阅读全文