micro:bit に入力したパルスのパルス幅を測る / ポーリング方式

SG から micro:bit の P0 端子にパルスを入力してそのパルス幅を測ってみる。10 マイクロ秒くらいまで測れる。
f:id:ti-nspire:20180515154659j:plain:h170 f:id:ti-nspire:20180515153052p:plain:h170

#include "MicroBit.h"
MicroBit uBit;

int main(void){
    uBit.init();
    uint32_t start;
    uint32_t end;
    uint32_t epalsedTime;
    while(1){
        while(uBit.io.P0.getDigitalValue() == 1){} // H の途中だったら一旦 L になるまで待つ。
        while(uBit.io.P0.getDigitalValue() == 0){} // あらためて H になるのを待つ。
        start = us_ticker_read();                  // H になったら時間 (マイクロ秒) を取得して、
        while(uBit.io.P0.getDigitalValue() == 1){} // L になるまで待って、
        end = us_ticker_read();                    // L になったらまた時間を取得して、
        epalsedTime = end - start;                 // H の持続時間 (パルス幅) を計算して、
        printf("%d\n\r", epalsedTime);             // パルス幅 (マイクロ秒) を表示する。
    }
    return 0;
}

f:id:ti-nspire:20180515151250p:plain
1 kHz の方形波を micro:bit の P0 端子に入力しているときのパルス幅〔マイクロ秒〕。
 
参考: Micro: bit IoT In C, pp.46-47