2014年6月14日土曜日

KURUMIボードをリアルタイムに動作させる

前回の記事では、delay(1000) を使って順番にLEDを点滅させました。しかしdelay( )関数を使うと、delay(1000) を実行している約1秒間(1000m秒)は、KURUMIボードは他の処理ができません。

ここで、millis( )関数を使ってリアルタイムに色んなタスクを実行する方法を説明します。

millis( ) 関数とは1ミリ秒を刻むストップウォッチ関数です。Kurumiボードに電源が供給され動作を開始するとmillis( )関数はリセットされそのタイマーをスタートします。 KURUMIマイコンが動作している限り止まることなく時を刻みます。 この関数は現在までの時間をミリ秒単位で値 (unsigned long) を返します。この関数は約50日間でオーバーフローしゼロに戻ります。

リアルタイム制御の方法
現在時間 「 millis() 関数 」と「過去に取得した時間」を比較し、決められた時間を過ぎたら特定の処理を実行する方法で実現できます。

下記にGR-KURUMIの赤いLEDを1秒ごとに点滅させる方法を添付します。

/* GR-KURUMI Hair-pin LED Blink with millis( ) function */

#include <RLduino78.h>
#define LED_R 22
#define LED_G 23
#define LED_B 24
#define LED_OFF 1
#define LED_ON 0

unsigned long myLastTimeStamp;
int toggle = 0;

void setup()
{
    pinMode(LED_R, OUTPUT);
    pinMode(LED_G, OUTPUT);
    pinMode(LED_B, OUTPUT);
    digitalWrite(LED_R, LED_OFF);
    digitalWrite(LED_G, LED_OFF);
    digitalWrite(LED_B, LED_OFF);    
}

void loop()
{
    if(millis() - myLastTimeStamp > 1000) {
       myLastTimeStamp = millis();
       if (toggle == 0) {
         toggle = 1;
         digitalWrite(LED_R, LED_ON);      
       } else {
         toggle = 0;
         digitalWrite(LED_R, LED_OFF);      
       }
    }
    
    // You make other operation here.
}

0 件のコメント:

コメントを投稿