micro:bit のイベントを使う 2 / 入力したパルスのパルス幅を測る

ポーリング方式ではなくイベントを利用してパルス幅を測ってみる。

#include "MicroBit.h"
MicroBit uBit;

// イベントハンドラーを定義する。
void getPulseWidth(MicroBitEvent e){ 
    printf("%d\n\r", (int)e.timestamp); // コールされたらそのときのタイムスタンプを表示する。
}

void printPulseWidth(void){
    // メッセージバスにイベントを登録する。
    uBit.messageBus.listen(MICROBIT_ID_IO_P0,               // 指定の端子から発生するイベントである。
                           MICROBIT_PIN_EVT_PULSE_HI,       // H のときに発生するイベントである。
                           getPulseWidth,                   // イベントが発生したら getPulseWidth() 函数を実行する。
                           MESSAGE_BUS_LISTENER_IMMEDIATE); // イベントが発生したらすぐに処理する。

    // どのような状態のときにイベントを発生させるのかを設定する。
    uBit.io.P0.eventOn(MICROBIT_PIN_EVENT_ON_PULSE); // 指定した端子が H または L のときにイベントを発生させる。
}

int main(void){
    uBit.init();
    printPulseWidth();
    return 0;
}

f:id:ti-nspire:20180517071551p:plain
micro:bit の P0 端子に周波数 1 kHz、デューティー 33% のパルスを入力している。単位はマイクロ秒である。80 マイクロ秒くらいまで測れる。