Primer: 4 temperatura - malikolibri/contiki-iris-examples GitHub Wiki
U ovom primeru je prikazan način prikupljanja podataka sa senzora i korišćenje ranije napisanog drajvera za senzorsku pločicu.
#include "contiki.h"
#include "dev/leds.h"
#include <stdio.h>
/*---------------------------------------------------------------------------*/
PROCESS(merenje, "merenje temperature");
PROCESS(ispis, "ispis");
AUTOSTART_PROCESSES(&merenje);
/*---------------------------------------------------------------------------*/
PROCESS_THREAD(merenje, ev, data) {
static struct etimer et1;
static unsigned short int i, akum; // promenljive za akumulaciju u iterator
int prosek; // promenljive za prosecnu temperaturu.
//U ovom slucaju nema potrebe da se cuvaju izmedju dva budjenja procesa pa zato nema ni "static"
PROCESS_BEGIN();
adc_init();
while(1) {
leds_off(LEDS_ALL);
leds_on(LEDS_RED);
printf("Merenje \n");
akum = 0;
for (i=0; i<3; i++){
akum += get_temp(); // funkcija je deklarisana u mda100cb.h Kao izlaz daje sirovu vrednost ADC zakacenog na temp senzor.
etimer_set(&et1, CLOCK_SECOND >> 1);
PROCESS_WAIT_EVENT_UNTIL(ev == PROCESS_EVENT_TIMER);
}
prosek = akum / 3;
process_start(&ispis, prosek);
}
PROCESS_END();
}
PROCESS_THREAD(ispis, ev, data) {
PROCESS_BEGIN();
leds_off(LEDS_ALL);
leds_on(LEDS_GREEN);
printf("Trenutna temperatura je: %d \n", data);
PROCESS_END();
}U procesu nazvanom merenje se odvija merenje temperature sa usrednjavanjem. U for petlji se poziva funkcija get_temp() koja vraća vrednost iz ADC konvertora na koji je kroz senzorsku pločicu priključen termistor. Vrednost se dodeljuje akumulacionoj promenljivoj. Između svakog merenja se proces pauzira na pola sekunde. CLOCK_SECOND je unapred definisan (zavisno od platforme) ceo broj čija vrednost je etimer-u otprilike 1s. Bitno je napomenti da je CLOCK_SECOND uvek 2^x oblika te je zgodno koristiti >> operator kako bi se efikasno delilo.
Nakon dobijanja usrednjene vrednosti, startuje se proces ispis sa process_start(&ispis, prosek). Funkcija proces_start očekuje drugi argument tipa void* koji zauzima 2 bajta u memoriji i služi za prosleđivanje pokazivača na podatke procesu. S obizrom na činjenicu da tip int takođe zauzima 2 bajta, funkcija je "zloupotrebljena" i prosledjena je direktno vrednost promenljive prosek.