具体工程已上传至优快云我的资源里,可直接免费下载
首先是加一个Component组件,包括LED.c和LED.h
如下所示:
LED.h文件代码:
#ifndef _LED_H_
#define _LED_H_
//定义LED灯的IO口
#define LED_RED_IO 46 //对应灯的LED
//定义LED状态
#define LED_ON 0 //LED灯亮电平为低电平
#define LED_OFF 1 //LED灯灭电平为高电平
//控制红灯
void led_red(int on);
//LED初始化
void initLed();
#endif
LED.c文件代码:
#include <stdio.h>
#include "driver/gpio.h"
#include "LED.h"
//控制红灯
void led_red(int on)
{
if(on==LED_ON)
{
gpio_set_level(LED_RED_IO, LED_ON);//开灯
}
else
{
gpio_set_level(LED_RED_IO, LED_OFF);//关灯
}
}
//LED初始化
void initLed()
{
//初始化红灯的IO口,
esp_rom_gpio_pad_select_gpio(LED_RED_IO);
gpio_set_direction(LED_RED_IO, GPIO_MODE_OUTPUT);
//关闭红灯
led_red(LED_OFF);
}
文件目录如下:
记得加上driver路径包含:
然后是app_main.c文件代码:
#include <stdio.h>
#include <inttypes.h>
#include "sdkconfig.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_chip_info.h"
#include "esp_flash.h"
#include "esp_log.h"
#include "esp_system.h"
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"
#include "esp_log.h"
#include "driver/uart.h"
#include "driver/gpio.h"
#include <driver/adc.h>
#include "string.h"
#include "sdkconfig.h"
#include "LED.h"
#include "esp_task_wdt.h"
//定义按键的IO口
#define KEY_IO 0
unsigned char led_index = 1;
//返回1表示有键按下,0表示没有键按下
int key_read_key1(void)
{
if(gpio_get_level(KEY_IO)==0)//按键按下
{
//等待松手
while(gpio_get_level(KEY_IO)==0)
{
vTaskDelay(10);
}
return 1;
}
return 0;
}
//按键初始化
void initKey()
{
//按键选择和设置为IO输入
esp_rom_gpio_pad_select_gpio(KEY_IO);
gpio_set_direction(KEY_IO, GPIO_MODE_INPUT);
}
//用户函数入口,相当于main函数
void app_main()
{
initLed();//LED灯初始化
initKey();//按键初始化
//按键改变灯的状态
//红灯--->亮--->灭,周期循环
while(1) {
if(key_read_key1())
{
if(led_index==0)
{
//第一次按下红灯亮
led_red(LED_ON);
led_index=1;
}
else
{
led_red(LED_OFF);
led_index=0;
}
}
vTaskDelay(100/portTICK_PERIOD_MS);
}
}
然后运行仿真如下: