ESP8266 RTOS2.0学习之旅(2)— 点亮第一个LED灯及按键输入

点亮第一个LED灯及按键输入

一、点亮第一个LED灯

user_init()函数中设置IO2为GPIO模式,如下所示:

PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO2_U, FUNC_GPIO2);	/* 设置IO2为GPIO模式 */

然后将其设置为输出模式,并设置为低电平,从而将LED点亮:

GPIO_OUTPUT_SET(GPIO_ID_PIN(2), 0);		/* 使能GPIO2位输出模式并设置为低电平,点亮LED */

然后编译下载运行,可以看到,LED已经点亮了。
在这里插入图片描述

二、LED闪烁

新建一个LED闪烁任务,并在user_init()中创建这个任务,要注意,RTOS SDK提供的任务优先级最高为14,但是有一些优先级被系统占用了,可供用户使用的优先级只有1~9,数值越大,优先级越高,另外任务堆栈设置范围也被规定在 [176, 512]之间。

/* 创建一个任务,参数分别为:1、任务函数,2、任务名称,3、任务堆栈,4、任务函数的参数,5、任务优先级,6、任务句柄*/
xTaskCreate(led_blink, "led blink", 256, NULL, 2, NULL);

然后我们实现任务函数如下所示:

/* LED闪烁任务函数 */
void led_blink(void *pvParameters)
{
	while(1)
	{
		GPIO_OUTPUT_SET(GPIO_ID_PIN(2), 0);
		vTaskDelay(500 / portTICK_RATE_MS);   /* 延时500ms */
		GPIO_OUTPUT_SET(GPIO_ID_PIN(2), 1);
		vTaskDelay(500 / portTICK_RATE_MS);   /* 延时500ms */
	}
	vTaskDelete(NULL);
}

然后编译下载运行,可以看到,LED一秒闪烁一次。

三、循环检测按键是否按下

首先将boot按键的引脚设置为GPIO模式,禁止输出,即设置为输入模式

    PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO0_U,FUNC_GPIO0);		/* 设置IO0为GPIO模式 */
    GPIO_DIS_OUTPUT(GPIO_ID_PIN(0)) ; 		/* 禁止GPIO2输出模式,即设置为输入模式 */

我们创建一个按键检测任务检测是否有按键按下,

	/* 创建一个按键检测任务 */
    xTaskCreate(key_task, "key task", 256, NULL, 3, NULL);

实现任务函数如下:

/* 按键检测任务函数 */
void key_task(void *pvParameters)
{
    static int key_up = 1;   /* 按键松开标志 */
    while (1)
    {
        /* 检测按键是否按下 */
        if (key_up && (GPIO_INPUT_GET(GPIO_ID_PIN(0)) == 0) )
        {
            vTaskDelay(50 / portTICK_RATE_MS);   /* 延时50ms消抖*/
            key_up = 0;
            if (GPIO_INPUT_GET(GPIO_ID_PIN(0)) == 0)
            {
                /* 按键BOOT按下,按键按下处理*/
                printf("BOOT Key pressed!\n");
            }
        }
        else if(GPIO_INPUT_GET(GPIO_ID_PIN(0)) == 1 )
        {
            key_up = 1;     /* 按键已松开 */
        }
        vTaskDelay(100 / portTICK_RATE_MS);
    }
}

编译下载运行,可以看到,按键检测成功
在这里插入图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值