Я программирую сенсорный датчик (XM1000). Я использую операционную систему Contiki для программирования этих устройств (я использую терминал для просмотра выходных данных и GEdit для записи моего кода «C». Этот датчик имеет датчик температуры, освещенности и влажности. на борту, а также 3 светодиодных фонаря.
Ниже у меня есть два набора кода. Первый набор кодов работает и дает мне показания датчика для значений температуры, света и влажности.
Второй набор кодовых функций. он включает/выключает светодиодные индикаторы и заставляет их регулярно мигать на сенсорном узле XM1000, подсчитывает количество миганий светодиода и выводит счет на консоль.
Проблема, с которой я сталкиваюсь, заключается в создании оператора if для выполнения следующих условий, и я изо всех сил пытаюсь объединить два кода вместе. Итак, вот чего я хочу добиться:
• Если температура превышает 26 градусов, включите светодиод 1 на 5 секунд, в противном случае, если температура равна или ниже 26 градусов, выключите светодиод 1.
• Если влажность превышает 40 %, включите светодиод 2 на 5 секунд, иначе, если влажность равна или ниже 40 %, выключите светодиод 2.
• Если интенсивность света превышает 510 нанометров, включите светодиод 3 на 5 секунд, в противном случае, если интенсивность света равна или ниже 510 нм, выключите светодиод 3.
Первый набор кода: он измеряет температуру, свет и влажность и выводит результаты в окно терминала.
#include "contiki.h" //Contiki Header File
#include "dev/light-sensor.h" //Light Sensor Header File
#include "dev/sht11-sensor.h" //Temperature and Humidity Header File
#include <stdio.h> /* for printf() */ // standard input/output library needed to write to the standard output
static struct etimer timer; //Process Requires a Timer
int light=0, temp=0, humid=0;
//To Start
/*___________________________________________________*/
PROCESS(sensor_reading_process, "Sensor Reading Process");
AUTOSTART_PROCESSES(&sensor_reading_process);
/*___________________________________________________*/
//PROCESS BEGINS
PROCESS_THREAD(sensor_reading_process, ev, data)
{
PROCESS_BEGIN();
SENSORS_ACTIVATE(light_sensor); //Activate the Light Sensor
SENSORS_ACTIVATE(sht11_sensor);//Activate Temp/Humidity Sensor
etimer_set(&timer, CLOCK_CONF_SECOND);//Configuring Timer 1SEC
while(1) { //Start of While Loop
PROCESS_WAIT_EVENT_UNTIL(ev==PROCESS_EVENT_TIMER);//Wait4Time
// This is how we get the Sensor Values for light, temp, hum
light = light_sensor.value(LIGHT_SENSOR_PHOTOSYNTHETIC);
temp = sht11_sensor.value(SHT11_SENSOR_TEMP);
humid = sht11_sensor.value(SHT11_SENSOR_HUMIDITY);
printf("Light=%d, Temp=%d, Humid=%d\n", light, temp, humid);
//Above Line if Print Plus Values
etimer_reset(&timer); //Reset the Timer
}
PROCESS_END(); //End of Process
}
Второй код:
#include "contiki.h"
#include "leds.h" // LED HEADER FILE
#include <stdio.h> /* for printf() */
static struct etimer timer;
/*____________________________________________________*/
PROCESS(led_blinking_process, "LED Blinking Process");
PROCESS(LED_process, "LED process");
AUTOSTART_PROCESSES(&LED_process);
/*____________________________________________________*/
PROCESS_THREAD(LED_process, ev, data)
{
static int count = 0;
PROCESS_BEGIN();
etimer_set(&timer, CLOCK_CONF_SECOND/2); // 0.5S timer
leds_init(); // initialise the LEDs
while(1) {
PROCESS_WAIT_EVENT_UNTIL(ev==PROCESS_EVENT_TIMER); // wait for timer event
count++; // count the blinking times
process_start(&led_blinking_process, NULL); // to blink the BLUE Led
printf("Count: %d\n", count); // output the counter number to console
etimer_reset(&timer); // reset the timer
}
PROCESS_END();
}
CODE FOR LED LIGHTS
/*____________________________________________________*/
PROCESS_THREAD(led_blinking_process, ev, data)
{
PROCESS_BEGIN();
leds_toggle(LEDS_BLUE); // Blinking the Blue LED
PROCESS_END();
}
Обратите внимание, что оба кода работают, когда я их запускаю, я просто пытаюсь их объединить, используйте оператор if, чтобы я мог выполнить свои функции, которые я указал выше.
Заранее спасибо за любую помощь или вклад!
led_blinking_process
иLED_process
— объедините их в один. (Вы даже можете сделать все в самомsensor_reading_process
.) Если вы решите сохранить 2 процесса, добавьте строкуprocess_poll(&LED_process);
в процесс датчиков, чтобы сигнализировать процессу светодиода о том, что датчики только что были прочитаны. - person kfx   schedule 25.04.2016nm
относится к пиковой спектральной чувствительности (свет — это электромагнитные волны с определенной длиной волны) ">en.wikipedia.org/wiki/ Датчики измеряют en.wikipedia.org /wiki/Irradiance с поправкой на кривые спектральной чувствительности датчиков, которые измеряются в ваттах на квадратную единицу. - person kfx   schedule 25.04.2016