Arduino: Tehtävän ajastus arduinolla


Huomasin varashälytintä tehdessä että tehtävien ajoitus aiheuttaa ongelmia ohjelmalogiikan luomisessa. Koska Arduino normaalisti ajaa vain yhtä looppia jossa tehtävät menevät peräkkäin, ongelmaksi muodostuu sellaiset tehtävät jotka pitäisi voida suorittaa samaan aikaan jonkin toisen prosessin kanssa. Varashälyttimeni kanssa ongelmaksi muodostui hälytyksen sammuttaminen, koska Arduino keskittyi hälytyksen suorittamiseen eikä ottanut huomioon kuittausnappia.

Pienen googletuksen tuloksena löysin Arduino Unolle portatun SchedulerARMAVR-kirjaston, jonka avulla on mahdollista ajaa Arduinossa useampaa loop-funtiota rinnakkain.

Seuraavassa esimerkki kirjaston käyttämisestä:

/*
Program blinks two leds using two different loop-functions
Author: Joni Junni
Date:   9.5.2013
*/

#include 

void setup() {
// Start the other loop function "loop2" using Scheduler
    Scheduler.startLoop(loop2);
    pinMode(13, OUTPUT); // Red led
    pinMode(6, OUTPUT);  // Green led
}

void loop() {
    digitalWrite(13, HIGH);
    Scheduler.delay(500);  // ms
    digitalWrite(13, LOW);
    Scheduler.delay(500);
}

void loop2() {
    digitalWrite(6, HIGH);
    Scheduler.delay(200);
    digitalWrite(6, LOW);
    Scheduler.delay(500);
    yield();
}

Kirjaston käyttö ei eroa Arduino Duelle tarkoitetusta Scheduler-kirjastosta ja sen referenssisivut kannattaa lukea läpi.

Lähteet