micro:bit のイベントを使う 1 / 入力パルスの立ち上がりでイベントを生成して何かをする

ここでは入力パルスの立ち上がりでイベントを生成してそのときのタイムスタンプを表示してみる。
 
イベントの使いかたは下のとおりである。

  1. イベント生成時にコールする函数 (イベントハンドラー) を定義しておく。
  2. 生成するイベントをメッセージバスに登録しておく。
  3. どのような状態のときにイベントを生成するのかを設定しておく。

 

#include "MicroBit.h"
MicroBit uBit;

// (1) イベントハンドラーを定義する。
// コールされたらそのときのタイムスタンプ (.timestamp) を表示するイベントハンドラーである。
// 引数を e にしているが発生したイベントを受け取る変数に過ぎないので e でも何でもよい。
void whenOn(MicroBitEvent e){            
    printf("%d\n\r", (int)e.timestamp);
}

int main(){
    uBit.init();
    
    // (2) 生成するイベントをメッセージバスに登録する。
    // ここでは、P0 端子に入力されたパルスの立ち上がりで whenOn という函数をコールしてすぐに処理する。
    uBit.messageBus.listen(MICROBIT_ID_IO_P0,               // イベントを生成するピンの ID
                           MICROBIT_PIN_EVT_RISE,           // イベントタイプ
                           whenOn,                          // イベント生成時にコールする函数
                           MESSAGE_BUS_LISTENER_IMMEDIATE); // イベントの処理方法
                           
    // (3) どのような状態のときにイベントを生成するのかを設定しておく。
    // ここでは ~.P0.~ (MICROBIT_PIN_EVENT_ON_EDGE) と指定しているので P0 端子の入力パルスの立ち上がりまたは立ち下がりでイベントが生成される。
    uBit.io.P0.eventOn(MICROBIT_PIN_EVENT_ON_EDGE);
}


1 Hz の方形波を micro:bit の P0 端子に入力しているので 1 秒(百万ミリ秒)ごとにタイムスタンプ〔マイクロ秒〕が更新されている。