ESP8266 RTOS學習之旅(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);
    }
}

編譯下載運行,可以看到,按鍵檢測成功
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章