飞道的博客

HaaS100按键及LED使用介绍

549人阅读  评论(0)

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中。

目前提供的接口如下:


  
  1. typedef struct {
  2. uint32_t short_press_max_ms; // default 2000
  3. uint32_t long_press_min_ms; // default 5000
  4. void (*short_press_handler)( void);
  5. void (*long_press_handler)( void);
  6. } key_cfg_t;
  7. 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!!!"为例,示例代码如下:


  
  1. void key_short_pressed()
  2. {
  3. printf( "key short press!!!\n");
  4. }
  5. void key_long_pressed()
  6. {
  7. printf( "key long press!!!\n");
  8. }
  9. void key_test_init()
  10. {
  11. key_cfg_t cfg;
  12. cfg.short_press_handler = key_short_pressed;
  13. cfg.long_press_handler = key_long_pressed;
  14. cfg.long_press_min_ms = 3000;
  15. cfg.short_press_max_ms = 1000;
  16. key_init(&cfg);
  17. }

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",完整代码如下:


  
  1. /*
  2. * Copyright (C) 2015-2020 Alibaba Group Holding Limited
  3. */
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <aos/errno.h>
  7. #include <aos/kernel.h>
  8. #include "aos/init.h"
  9. #include "board.h"
  10. #include <k_api.h>
  11. #include "key.h"
  12. void key_short_pressed()
  13. {
  14. printf( "key short press!!!\n");
  15. }
  16. void key_long_pressed()
  17. {
  18. printf( "key long press!!!\n");
  19. }
  20. void key_test_init()
  21. {
  22. key_cfg_t cfg;
  23. cfg.short_press_handler = key_short_pressed;
  24. cfg.long_press_handler = key_long_pressed;
  25. cfg.long_press_min_ms = 3000;
  26. cfg.short_press_max_ms = 1000;
  27. key_init(&cfg);
  28. }
  29. int application_start(int argc, char *argv[])
  30. {
  31. printf( "key test entry here!\r\n");
  32. key_test_init();
  33. while( 1) {
  34. aos_msleep( 1000);
  35. };
  36. }

3) 编译代码,命令如下:


  
  1. aos make clean
  2. aos make helloworl_demo@haas100 -c config
  3. 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中。

目前提供的接口如下:


  
  1. typedef enum {
  2. LED_OFF,
  3. LED_ON
  4. } led_e;
  5. void led_switch(int id, led_e onoff);

led_switch接口的第一个参数为LED的id号,第二个参数表示开灯还是关灯。

LED的id编号范围为1到5,编号与灯的对应关系见简介中图示。

3.2、LED功能示例

3.2.1 示例代码

实现5个LED灯循环亮灭功能,示例代码如下:


  
  1. unsigned int led_id = 1;
  2. while( 1) {
  3. for( int i = 1; i < 6; i++ ) {
  4. if( i == ((led_id % 5) + 1) ) {
  5. led_switch(i, LED_ON);
  6. } else {
  7. led_switch(i, LED_OFF);
  8. }
  9. aos_msleep( 50);
  10. }
  11. led_id ++;
  12. }

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示例代码,完整代码如下:


  
  1. /*
  2. * Copyright (C) 2015-2020 Alibaba Group Holding Limited
  3. */
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <aos/errno.h>
  7. #include <aos/kernel.h>
  8. #include "aos/init.h"
  9. #include "board.h"
  10. #include <k_api.h>
  11. #include "led.h"
  12. int application_start(int argc, char *argv[])
  13. {
  14. unsigned int led_id = 1;
  15. printf( "led test demo entry here!\r\n");
  16. while( 1) {
  17. for( int i = 1; i < 6; i++ ) {
  18. if( i == ((led_id % 5) + 1) ) {
  19. led_switch(i, LED_ON);
  20. } else {
  21. led_switch(i, LED_OFF);
  22. }
  23. aos_msleep( 50);
  24. }
  25. led_id ++;
  26. }
  27. }

3) 编译代码,命令如下:


  
  1. aos make clean
  2. aos make helloworl_demo@haas100 -c config
  3. aos make

4) 烧录版本

   完成后,烧录编译出来的版本到HaaS100上,烧录方法参见HaaS100快速开始

   烧录完后,按reset键重启HaaS100板子。

5)验证

  板子启动后,可以观察到板子上LED1到LED5循环亮灭。

 

4、开发者技术支持

如需更多技术支持,可加入钉钉开发者群,或者关注微信公众号

更多技术与解决方案介绍,请访问阿里云AIoT首页https://iot.aliyun.com/

 


转载:https://blog.csdn.net/HaaSTech/article/details/111399872
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场