HaaS100按鍵及LED使用介紹

HaaS技術社群發表於2020-12-19

1、簡介

HaaS100有2個按鍵及6個LED,如下圖所示:

  image.png

2個按鍵如上圖所示,左邊一個為復位鍵,按下後直接重啟單板,軟體無法控制。右邊一個為功能鍵,可以通過軟體程式碼自定義相關功能。

6個LED燈如上圖所示,其中右1為電源燈,上電後自動亮起,軟體無法控制。其餘LED1到LED5,可以通過軟體程式碼自定義。

 

2、按鍵軟體控制方法

2.1、按鍵驅動介面

按鍵驅動的程式碼在platform/board/haas100/drivers/key.c中

介面在platform/board/haas100/drivers/key.h中。

目前提供的介面如下:

typedef struct {
    uint32_t short_press_max_ms;   // default 2000
    uint32_t long_press_min_ms;    // default 5000
    void (*short_press_handler)(void);
    void (*long_press_handler)(void);
} key_cfg_t;

int key_init(key_cfg_t *cfg);

通過key_init介面,可以設定按鍵短按及長按的觸發時間,同時為短按及長按動作掛接自定義回撥函式。

注意:短按時間為最長時間,預設2000ms,即按鍵時間短於2000ms認為是短按,觸發短按回撥函式  short_press_handler;

長按時間為最短時間,預設5000ms,即按鍵時間超過5000ms認為是長按,觸發長按回撥函式long_press_handler。

2.2 按鍵功能示例

2.2.1 示例程式碼        

以實現1秒短按列印"key short press!!!",3秒長按列印"key long press!!!"為例,示例程式碼如下:

void key_short_pressed()
{
    printf("key short press!!!\n");
}

void key_long_pressed()
{
    printf("key long press!!!\n");
}

void key_test_init()
{
    key_cfg_t cfg;
    cfg.short_press_handler = key_short_pressed;
    cfg.long_press_handler  = key_long_pressed;
    cfg.long_press_min_ms   = 3000;
    cfg.short_press_max_ms  = 1000;
    key_init(&cfg);
}

2.2.2 開發驗證

1)下載程式碼

執行下面命令下載haas程式碼

git clone https://gitee.com/alios-things/AliOS-Things.git -b dev_3.1.0_haas

2) 新增按鍵應用程式碼

   將示例程式碼key_short_pressed、key_long_pressed、key_test_init拷貝到application/example/helloworld_demo/appdemo.c中,然後在application_start中呼叫key_test_init,幷包含標頭檔案"key.h",完整程式碼如下:

/*
 * Copyright (C) 2015-2020 Alibaba Group Holding Limited
 */

#include <stdio.h>
#include <stdlib.h>
#include <aos/errno.h>
#include <aos/kernel.h>
#include "aos/init.h"
#include "board.h"
#include <k_api.h>
#include "key.h"

void key_short_pressed()
{
    printf("key short press!!!\n");
}

void key_long_pressed()
{
    printf("key long press!!!\n");
}

void key_test_init()
{
    key_cfg_t cfg;
    cfg.short_press_handler = key_short_pressed;
    cfg.long_press_handler  = key_long_pressed;
    cfg.long_press_min_ms   = 3000;
    cfg.short_press_max_ms  = 1000;
    key_init(&cfg);
}

int application_start(int argc, char *argv[])
{
    printf("key test entry here!\r\n");

    key_test_init();

    while(1) {
        aos_msleep(1000);
    };
}

3) 編譯程式碼,命令如下:

aos make clean
aos make helloworl_demo@haas100 -c config
aos make

4) 燒錄版本

   完成後,燒錄編譯出來的版本到HaaS100上,燒錄方法參見HaaS100快速開始

   燒錄完後,按reset鍵重啟HaaS100板子。

5) 驗證

  板子啟動後,短按功能鍵(按住按鍵時間少於1秒就鬆開),觀察串列埠,應該列印出 key short press!!!

  長按功能鍵(按住功能鍵超過3秒再鬆開),觀察串列埠,應該列印出 key long press!!!

3、LED軟體控制方法

3.1、LED驅動介面

LED驅動程式碼在platform/board/haas100/drivers/led.c中。

介面在platform/board/haas100/drivers/led.h中。

目前提供的介面如下:

typedef enum {
    LED_OFF,
    LED_ON
} led_e;

void led_switch(int id, led_e onoff);

led_switch介面的第一個引數為LED的id號,第二個參數列示開燈還是關燈。

LED的id編號範圍為1到5,編號與燈的對應關係見簡介中圖示。

3.2、LED功能示例

3.2.1 示例程式碼

實現5個LED燈迴圈亮滅功能,示例程式碼如下:

unsigned int led_id = 1;
while(1) {
	for(int i = 1; i < 6; i++ ) {
        if( i == ((led_id % 5) + 1) ) {
            led_switch(i, LED_ON);
        } else {
             led_switch(i, LED_OFF);
        }
        aos_msleep(50);
    }
    led_id ++;
}

3.3.3 開發驗證

1)下載程式碼

     執行下面命令下載haas程式碼

git clone https://gitee.com/alios-things/AliOS-Things.git -b dev_3.1.0_haas

2) 新增LED應用程式碼

   在application/example/helloworld_demo/appdemo.c中,包含標頭檔案"led.h",新增LED示例程式碼,完整程式碼如下:

/*
 * Copyright (C) 2015-2020 Alibaba Group Holding Limited
 */

#include <stdio.h>
#include <stdlib.h>
#include <aos/errno.h>
#include <aos/kernel.h>
#include "aos/init.h"
#include "board.h"
#include <k_api.h>
#include "led.h"

int application_start(int argc, char *argv[])
{
    unsigned int led_id = 1;

    printf("led test demo entry here!\r\n");

    while(1) {
        for(int i = 1; i < 6; i++ ) {
            if( i == ((led_id % 5) + 1) ) {
                led_switch(i, LED_ON);
            } else {
                led_switch(i, LED_OFF);
            }
            aos_msleep(50);
        }
        led_id ++;
    }
}

3) 編譯程式碼,命令如下:

aos make clean
aos make helloworl_demo@haas100 -c config
aos make

4) 燒錄版本

   完成後,燒錄編譯出來的版本到HaaS100上,燒錄方法參見HaaS100快速開始

   燒錄完後,按reset鍵重啟HaaS100板子。

5)驗證

  板子啟動後,可以觀察到板子上LED1到LED5迴圈亮滅。

 

4、開發者技術支援

如需更多技術支援,可加入釘釘開發者群

更多技術與解決方案介紹,請訪問阿里雲AIoT首頁https://iot.aliyun.com/

 

 

相關文章