天天看點

HaaS100按鍵及LED使用介紹1、簡介2、按鍵軟體控制方法2.1、按鍵驅動接口2.2、按鍵功能示例2.2.1、示例代碼2.2.2、驗證步驟3、LED軟體控制方法3.1、LED驅動接口3.2、LED功能示例3.2.1、示例代碼3.3.2、驗證過程開發者支援

轉自HaaS技術社群

1、簡介

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

HaaS100按鍵及LED使用介紹1、簡介2、按鍵軟體控制方法2.1、按鍵驅動接口2.2、按鍵功能示例2.2.1、示例代碼2.2.2、驗證步驟3、LED軟體控制方法3.1、LED驅動接口3.2、LED功能示例3.2.1、示例代碼3.3.2、驗證過程開發者支援

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)環境搭建

開發環境的搭建請參考

《aos-studio使用說明之搭建開發環境》

,其中詳細的介紹了AliOS Things 3.3的IDE內建開發環境的搭建流程。

helloworld_demo的代碼下載下傳請參考

《aos-studio使用說明之建立工程》

> 選擇解決方案: “helloworld簡單示例”

> 選擇開發闆: Haas100 board configure

2) 添加按鍵應用代碼

将示例代碼key_short_pressed、key_long_pressed、key_test_init拷貝到solutions/helloworld_demo/helloworld.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)驗證

按照前述文檔編譯并燒錄固件到HaaS100闆子上。

闆子啟動後,短按功能鍵(按住按鍵時間少于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.2、驗證過程

參見章節2.2.2 第一步。

2) 添加LED應用代碼

在solutions/helloworld_demo/helloworld.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 ++;
 
    }
 
}           

2)驗證

按照前述文檔,編譯并燒錄固件到HaaS100。

闆子啟動後,可以觀察到闆子上LED1到LED5循環亮滅。

開發者支援

如需更多技術支援,可加入釘釘開發者群,或者關注微信公衆号。

HaaS100按鍵及LED使用介紹1、簡介2、按鍵軟體控制方法2.1、按鍵驅動接口2.2、按鍵功能示例2.2.1、示例代碼2.2.2、驗證步驟3、LED軟體控制方法3.1、LED驅動接口3.2、LED功能示例3.2.1、示例代碼3.3.2、驗證過程開發者支援

更多技術與解決方案介紹,請通路HaaS官方網站

https://haas.iot.aliyun.com