gpt4 book ai didi

Contiki - 如何触发事件?

转载 作者:太空宇宙 更新时间:2023-11-04 00:00:12 26 4
gpt4 key购买 nike

我正在尝试在 Contiki 中为 Zolertia REmote 编写一个程序,它将从传感器读取一个值,并且根据这个值以及 Remote 上的用户按钮是否被长时间按下,LED 将被打开打开、变暗或将保持关闭状态。到目前为止,我拥有的部分代码是这样的:

同时(1){

PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&et));
ldr = adc_zoul.value(ZOUL_SENSORS_ADC1);
printf("ADC1 = %u raw\n", ldr);

if (ldr >= 16500) {
PROCESS_YIELD();
if (ev == button_press_duration_exceeded) {
GPIO_SOFTWARE_CONTROL(EXAMPLE_PORT_BASE, EXAMPLE_PIN_MASK);
GPIO_SET_OUTPUT(EXAMPLE_PORT_BASE, EXAMPLE_PIN_MASK);
GPIO_SET_PIN(EXAMPLE_PORT_BASE, EXAMPLE_PIN_MASK); /*Set High*/
}
else {
pwm_enable(pwm_num.freq, pwm_num.duty, 0, pwm_num.timer, pwm_num.ab);
pwm_start(pwm_num.timer, pwm_num.ab, pwm_num.port, pwm_num.pin);
}
}
else if (ldr < 16500 && ldr >= 6600) {
PROCESS_YIELD();
if(ev == button_press_duration_exceeded) {
pwm_enable(pwm_num.freq, pwm_num.duty, 0, pwm_num.timer, pwm_num.ab);
pwm_start(pwm_num.timer, pwm_num.ab, pwm_num.port, pwm_num.pin);
}
else {
GPIO_SOFTWARE_CONTROL(EXAMPLE_PORT_BASE, EXAMPLE_PIN_MASK);
GPIO_SET_OUTPUT(EXAMPLE_PORT_BASE, EXAMPLE_PIN_MASK);
GPIO_CLR_PIN(EXAMPLE_PORT_BASE, EXAMPLE_PIN_MASK); /*Set Low*/
}
}
else {
GPIO_SOFTWARE_CONTROL(EXAMPLE_PORT_BASE, EXAMPLE_PIN_MASK);
GPIO_SET_OUTPUT(EXAMPLE_PORT_BASE, EXAMPLE_PIN_MASK);
GPIO_CLR_PIN(EXAMPLE_PORT_BASE, EXAMPLE_PIN_MASK); /*Set Low*/
}


etimer_reset(&et);

我的问题是当 ldr 值从低于 6600 变为高于 16500 时,因此无论如何 LED 灯都应该变暗。然而,事实上,除非我按下用户按钮,否则它不会变暗,即使是一秒钟。然后,只要 ldr 值保持在 16500 以上,一切正常 - 当我按下按钮时,led 完全打开,当我释放它时,led 变暗。但是,当 ldr 变化并从 16500 以上变为 [6600,16500),并且在未按下按钮时 LED 应该熄灭,它实际上变暗,直到我再次按下用户按钮甚至一秒钟。

如我所见,问题是即使 ldr 值发生变化,除非我按下用户按钮,否则它不会被读取。我认为这与命令 PROCESS_YIELD(); 的使用有关,它告诉程序等待事件发生。但是,如果我删除此命令,则 LED 根本不会亮起或变暗。所以,我的猜测是我必须触发一个事件才能读取 ldr 值。

有没有人知道如何做到这一点?提前致谢!

最佳答案

您可能需要使用以下内容:

Process_wait_event_until(ev==XXXXXX); 

而不是 process yield

关于Contiki - 如何触发事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47868196/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com