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://blog.csdn.net/HaaSTech/article/details/111399872