[ intelisense @ 09.12.2014. 18:36 ] @
Pozdrav svima!

Skoro sam radio jedan projekat sa Arduinom i bilo mi je neophodno da u razlicitim vremenskim intervalima obavljam izvesne radnje. Npr., da ocitavam temperaturu svakih 5 minuta i da ocitavam vreme sa DS1302 svakih 5 sekundi. To sam uradio na sledeci nacin:

loop():

//----------------------------------------------------------
// za ocitavanje temperature
const unsigned long interval = 5 * 60 * 1000UL;
static unsigned long last_sample_time = 0 - interval;

unsigned long now = millis();
if ((now - last_sample_time) >= interval)
{
last_sample_time = now;

temperature();
}
//---------------------------------------------------------
// za ocitavanje vremena
const unsigned long clock_interval = 5000UL;
static unsigned long last_sample_time_clock = 0 - clock_interval;

unsigned long now_clock = millis();
if ((now_clock - last_sample_time_clock) >= clock_interval)
{
last_sample_time_clock = now_clock;

clock();
}
//----------------------------------------------------------

Ono sto me zanima je: Ako bi se nekada desilo da se vremena semplovanja temperature i sata poklope, ili npr. kada bih bilo koje 2 stvari semplovao u isto vreme, da li bi se obe stvari korektno semplovale ili bi nesto bilo izostavljeno?

Hvala.
[ Odin D. @ 09.12.2014. 18:50 ] @
Ne možeš ti softverski ništa semplovati u isto vreme, jer mikrokontroler može da izvršava samo jednu po jednu instrukciju redom.
"U isto vreme" u tvom primjerju može da znači da će mikrokontroler u nekom trenutku očitati jedno, a odmah u najbližem sledećem mogućem taktu procesora drugu.
Tebi je to možda "u isto vreme", ali na nivou mikrokontrolera jedno se uvijek desi par mili/mikro/nano...sekundi (zavisi od brzine procesora) poslije onog prethodnog.
[ intelisense @ 09.12.2014. 18:57 ] @
Hvala na odgovoru!

Znam da moje "isto vreme" i njegovo nisu ista vremena.
Hteo sam samo da proverim da li ce se sve odvijati kako treba.

Pozdrav!
[ Zlatni_bg @ 14.12.2014. 00:36 ] @
U ovom slucaju se najcesce koriste interruptovi, pogledaj malo o njima.

http://arduino.cc/en/Reference/Interrupts

Ima vise nacina kako mozes da ih koristis, vremenski, sa nekim okidacima, itd... Ovo ti je u sustini neki "multitasking" kod Arduina.
[ intelisense @ 17.12.2014. 23:18 ] @
Bice od koristi, hvala!
[ intelisense @ 03.01.2015. 16:08 ] @
Da li neko ima ideju kako da napravim neki pseudo multi-threading kod Arduina?

Konkretno mi treba resenje sledeceg problema:
Napravio sam tajmer koji okida releje u zavisnosti od vremena koje se ucita putem daljinskog upravljaca (sve se ispisuje na LCD). Sad, da bih uneo vreme koje koristi tajmer, moram da stavim beskonacnu petlju, a ona mi blokira sve ostale stvarcice koje se izvrsavaju u pozadini.
[ bogdan.kecman @ 03.01.2015. 16:17 ] @
interapti
[ intelisense @ 03.01.2015. 16:45 ] @
U redu, interapti ..

Hardverske verovatno ne bih mogao da iskoristim jer hocu da mi sve radi na daljinac.
Sad, za softverske ... Nesto sam citao da se mogu pozajmiti neka 3 tajmera u te svrhe, ali i to da moze doci do konflikta ako se oni vec koriste.
[ introitus @ 03.01.2015. 17:24 ] @
Ne poznajem Arduino platformu ali dovoljan ti je jedan interapt za
daljinac, a sta se tacno desilo obradjujes kad se dogodi interapat i
onda izvrsavas sta si zamislio.
[ basicD @ 03.01.2015. 22:53 ] @
Citat:
intelisense: Da li neko ima ideju kako da napravim neki pseudo multi-threading kod Arduina?


SoftTimer
[ bogdan.kecman @ 04.01.2015. 01:13 ] @
pazi sa tim pitanjem je jasno da ne razumes kako interapti rade :(

elem, ako ne umes sam, onda uzmi neki gotov rtos za arduino

https://github.com/greiman/NilRTOS-Arduino
https://code.google.com/p/duinos/
https://github.com/PeterVranken/RTuinOS

ako se dobro secam duinos podrzava preemtive mutlitasking, baziran na
freertos, moguce najbolji od ta tri koja sam ti linkovao, no pogledaj
sam pa odluci