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.

⚠️ **GitHub.com Fallback** ⚠️