我正在使用contikiOS和C,我正在尝试创建等待10s然后打印温度的代码。然后,它将启动一个不同的进程,并每隔1秒记录一次temp。当温度超过28摄氏度时,它将检查并打开led。
目前,它的执行方式如下:
等待10s、打印临时、等待10s、终止
下面是我的代码:
#include "dev/light-sensor.h"
#include "dev/sht11-sensor.h"
#include "dev/leds.h"
#include <stdio.h> /* For printf() */
unsigned short d1(float f) // Integer part
{
return((unsigned short)f);
}
unsigned short d2(float f) // Fractional part
{
return(1000*(f-d1(f)));
}
/*---------------------------------------------------------------------------*/
PROCESS(alarm, "alarm");
/*---------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------*/
PROCESS(detect, "detect");
AUTOSTART_PROCESSES(&detect);
/*---------------------------------------------------------------------------*/
PROCESS_THREAD(detect, ev, data)
{
static struct etimer timer;
PROCESS_BEGIN();
etimer_set(&timer, CLOCK_CONF_SECOND * 10);
SENSORS_ACTIVATE(sht11_sensor);
leds_off(LEDS_ALL);
while (1) {
if (!etimer_pending()) {
break;
}
else {
PROCESS_WAIT_EVENT_UNTIL(ev == PROCESS_EVENT_TIMER);
float temp = 0.01*sht11_sensor.value(SHT11_SENSOR_TEMP) - 39.6;
printf("\n%u.%03u C", d1(temp), d2(temp));
if (temp > 28) {
leds_on(LEDS_ALL);
clock_wait(CLOCK_SECOND);
leds_off(LEDS_ALL);
}
if (temp <= 28) {
leds_off(LEDS_ALL);
}
}
etimer_stop(&timer);
}
PROCESS_EXIT();
PROCESS_START(&alarm, NULL);
PROCESS_END();
}
/*---------------------------------------------------------------------------*/
PROCESS_THREAD(alarm, ev, data)
{
static struct etimer timer1;
PROCESS_BEGIN();
etimer_set(&timer1, CLOCK_SECOND);
SENSORS_ACTIVATE(sht11_sensor);
leds_off(LEDS_ALL);
while (1) {
PROCESS_WAIT_EVENT_UNTIL(ev == PROCESS_EVENT_TIMER);
float temp = 0.01*sht11_sensor.value(SHT11_SENSOR_TEMP) - 39.6;
printf("\n%u.%03u C", d1(temp), d2(temp));
if (temp > 28) {
leds_on(LEDS_ALL);
clock_wait(CLOCK_SECOND);
leds_off(LEDS_ALL);
}
if (temp <= 28) {
leds_off(LEDS_ALL);
}
etimer_reset(&timer1);
}
PROCESS_END();
}发布于 2019-11-28 06:07:23
根据contiki wiki on processes,process_start()方法是小写的。改变这一点,你的程序就应该可以工作了。
https://stackoverflow.com/questions/59078597
复制相似问题