本文共 3814 字,大约阅读时间需要 12 分钟。
HaaS100有2个按键及6个LED,如下图所示:
2个按键如上图所示,左边一个为复位键,按下后直接重启单板,软件无法控制。右边一个为功能键,可以通过软件代码自定义相关功能。
6个LED灯如上图所示,其中右1为电源灯,上电后自动亮起,软件无法控制。其余LED1到LED5,可以通过软件代码自定义。
按键驱动的代码在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。
以实现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);}
1)环境搭建
开发环境的搭建请参考,其中详细的介绍了AliOS Things 3.3的IDE集成开发环境的搭建流程。
helloworld_demo的代码下载请参考,
*> 选择解决方案: “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#include #include #include #include "aos/init.h"#include "board.h"#include #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!!!
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,编号与灯的对应关系见简介中图示。
实现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 ++;}
1)环境搭建
参见章节2.2.2 第一步。
2) 添加LED应用代码
在solutions/helloworld_demo/helloworld.c中,包含头文件"led.h",添加LED示例代码,完整代码如下:
/* * Copyright (C) 2015-2020 Alibaba Group Holding Limited */#include#include #include #include #include "aos/init.h"#include "board.h"#include #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循环亮灭。
如需更多技术支持,可加入钉钉开发者群,或者关注微信公众号。
更多技术与解决方案介绍,请访问HaaS官方网站。
转载地址:http://vsdrf.baihongyu.com/