我正在使用contikiOS和C,我正在尝试创建将等待10秒然后打印温度的代码。然后它将开始一个不同的过程,并每隔1s记录一次温度。它会检查温度是否超过28℃并打开电源。
当前,它执行如下:
等待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();
}
根据contiki wiki on processes,process_start()
方法为小写。更改它,您的程序应该可以运行。
((为什么它是Contiki中唯一的小写方法,完全是另一个问题...)