1、簡介
HaaS100有2個按鍵及6個LED,如下圖所示:
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/
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/237729.html
標籤:其他
