micro:bit / mbed / 温湿度センサーAM2302 (DHT22) / データパルスの長さを0、1に変換する

#include "MicroBit.h"
MicroBit uBit;

//MicroBitPin P0 = uBit.io.pin[0];
MicroBitPin P0 = uBit.io.P0;

int main(void){
    uBit.init();
    
    // スタートシーケンスを開始する。 
    P0.setDigitalValue(1);// P0を一旦Hにしてから、
    P0.setDigitalValue(0);// P0をLにして、
    uBit.sleep(1);        // Lの状態を0.8~20ミリ秒間保ってから、
    P0.getDigitalValue(); // P0のIOをINに(Hi-Zに)切り替える。バスはプルアップされているのでHになる。
    
    while(P0.getDigitalValue() == 1){} // バスがLになるのを待って、
    
    // スタートビットも含めて全部で41ビットのHパルスの持続時間(ループ回数)を取得する。
    int buf[41];
    for(int j=0; j<41; j++){
        while(P0.getDigitalValue()==0){} // バスがHになるのを待って、
        
        int i;
        for(i=1; i<256; i++){
            if(P0.getDigitalValue()==0){break;} // Hの持続している間のループ回数を数える。
        }
        buf[j] = (i > 11)? 1: 0; // ループ回数から0か1かを判定する。テキストと同じく11を閾値にする。
    }
    
    for(int j=0;j<41;j++){
        printf("%d: %d\n", j, buf[j]); // 確認する。
    }
    
}

f:id:ti-nspire:20181112132631p:plain