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;
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?
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.
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.
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.
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.
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