SG から micro:bit の P0 端子にパルスを入力してそのパルス幅を測ってみる。10 マイクロ秒くらいまで測れる。
#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; }
1 kHz の方形波を micro:bit の P0 端子に入力しているときのパルス幅〔マイクロ秒〕。
参考: Micro: bit IoT In C, pp.46-47