3.5.5 添加按钮事件

现在我们想去检测用户是有将按键按下了。

在Contiki中,将按键当做是一个传感器。我们将会使用库core/dev/button-sensor.h

RE-Mote平台实现了额外的按键功能,比如长按检测,可用于将来扩展由按键触发的事件。文件platform/zoul/dev/button-sensor.c中有更详细的介绍,文件examples/zolertia/zoul/zoul-demo.c中有相关例程。

创建一个新的例程文件,命令为test-button.c,包含头文件dev/button-sensor.h和按键事件如下:

  1. #include "contiki.h"
  2. #include "dev/leds.h"
  3. #include "dev/button-sensor.h"
  4. #include <stdio.h>
  5. /*-------------------------------------------------*/
  6. PROCESS(test_button_process, "Test button");
  7. AUTOSTART_PROCESSES(&test_button_process);
  8. /*-------------------------------------------------*/
  9. PROCESS_THREAD(test_button_process, ev, data)
  10. {
  11. PROCESS_BEGIN();
  12. SENSORS_ACTIVATE(button_sensor);
  13. while(1) {
  14. PROCESS_WAIT_EVENT_UNTIL((ev==sensors_event) && (data == &button_sensor));
  15. printf("I pushed the button!\n");
  16. }
  17. PROCESS_END();
  18. }

这个进程中有一个主循环。使用wait语句等待按键被按下。当你按下按键时,这两个条件将会被满足(事件来着传感器、事件是按键被按下),从而会在控制台上打印相关字符。

练习:当按下按键时,打开LED。当再次按键时,关闭LED。