Contiki-如何触发事件?

Contiki-如何触发事件?,c,contiki,C,Contiki,我正在尝试在Contiki中为Zolertia REmote编写一个程序,该程序将从传感器读取一个值,根据该值以及遥控器上的用户按钮是否被按下一段时间,led将打开、变暗或保持关闭。到目前为止,我掌握的部分代码如下: 而(1){ PROCESS_WAIT_EVENT_直到(etimer_过期(&et)); ldr=模数转换值(模数转换传感器ADC1); printf(“ADC1=%u raw\n”,ldr); 如果(ldr>=16500){ 过程_产量(); 如果(ev==按钮\按下\超过持续时

我正在尝试在Contiki中为Zolertia REmote编写一个程序,该程序将从传感器读取一个值,根据该值以及遥控器上的用户按钮是否被按下一段时间,led将打开、变暗或保持关闭。到目前为止,我掌握的部分代码如下:

而(1){

PROCESS_WAIT_EVENT_直到(etimer_过期(&et));
ldr=模数转换值(模数转换传感器ADC1);
printf(“ADC1=%u raw\n”,ldr);
如果(ldr>=16500){
过程_产量();
如果(ev==按钮\按下\超过持续时间){
GPIO_软件_控制(示例_端口_基座、示例_引脚_掩码);
GPIO_设置_输出(示例_端口_基座,示例_引脚_掩码);
GPIO_设置_引脚(示例_端口_基座,示例_引脚_掩码);/*设置为高*/
}
否则{
pwm_启用(pwm_数频率、pwm_数占空比、0、pwm_数定时器、pwm_数ab);
pwm_启动(pwm_num.timer、pwm_num.ab、pwm_num.port、pwm_num.pin);
}
}
否则如果(ldr<16500&&ldr>=6600){
过程_产量();
如果(ev==按钮\按下\超过持续时间){
pwm_启用(pwm_数频率、pwm_数占空比、0、pwm_数定时器、pwm_数ab);
pwm_启动(pwm_num.timer、pwm_num.ab、pwm_num.port、pwm_num.pin);
}
否则{
GPIO_软件_控制(示例_端口_基座、示例_引脚_掩码);
GPIO_设置_输出(示例_端口_基座,示例_引脚_掩码);
GPIO_CLR_引脚(示例_端口_基座,示例_引脚_掩码);/*设置为低*/
}
}
否则{
GPIO_软件_控制(示例_端口_基座、示例_引脚_掩码);
GPIO_设置_输出(示例_端口_基座,示例_引脚_掩码);
GPIO_CLR_引脚(示例_端口_基座,示例_引脚_掩码);/*设置为低*/
}
etimer_重置(&et);
}

我的问题是,当ldr值从6600以下变为16500以上时,因此无论发生什么情况,led都应该变暗。然而,事实上,它不会变暗,除非我按下用户按钮,哪怕是一秒钟。然后,只要ldr值保持在16500以上,一切正常-当我按下按钮时,led完全亮起,当我松开它时,led变暗。然而,当ldr变化并从16500以上变为[660016500]时,led应在未按下按钮时熄灭,它实际上会变暗,直到我再次按下用户按钮,即使是一秒钟

在我看来,问题在于,即使ldr值发生变化,除非我按下用户按钮,否则不会读取它。我认为这与命令进程的使用有关,它告诉程序等待事件发生。但是,如果我删除此命令,led根本不会打开或变暗。因此,我猜我必须触发一个事件,以便读取ldr值


有人知道怎么做吗?提前谢谢!

您可能需要使用以下方法:

Process_wait_event_until(ev==XXXXXX); 
而不是
过程产量

Process_wait_event_until(ev==XXXXXX);