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
和按键事件如下:
#include "contiki.h"
#include "dev/leds.h"
#include "dev/button-sensor.h"
#include <stdio.h>
/*-------------------------------------------------*/
PROCESS(test_button_process, "Test button");
AUTOSTART_PROCESSES(&test_button_process);
/*-------------------------------------------------*/
PROCESS_THREAD(test_button_process, ev, data)
{
PROCESS_BEGIN();
SENSORS_ACTIVATE(button_sensor);
while(1) {
PROCESS_WAIT_EVENT_UNTIL((ev==sensors_event) && (data == &button_sensor));
printf("I pushed the button!\n");
}
PROCESS_END();
}
这个进程中有一个主循环。使用wait语句等待按键被按下。当你按下按键时,这两个条件将会被满足(事件来着传感器、事件是按键被按下),从而会在控制台上打印相关字符。
练习:当按下按键时,打开LED。当再次按键时,关闭LED。