私は現在、私が32ビットシーケンスを読むプロジェクトに取り組んでいます。
シーケンスが受信されないとき、digitalPinは常にHIGHで、シーケンスが開始されると約1kHzでオシレーションを開始します( RC5 )。
私は、どの信号がdigitalPinにあるかに応じてuint32_tのビットを設定し、クリアしています。
MSB以外のすべてのビットでうまく動作しているようです。
私が何を意味するのかを示す短いコードスニペット:
const short irPin = 8;
const short msgDelay = 250;
uint32_t data = 0xFFFFFFFF;
long msgArrived = 0;
void setup(){
Serial.begin(115200);
pinMode(irPin, INPUT);
}
void loop(){
long now = millis();
if( (!(PINB & 1)) && ((now - msgArrived)> msgDelay)){
msgArrived = millis();
bitClear(data, 31);
Serial.println(data, BIN);
}
}
これは私に
11111111111111111111111111111111
私はすでに試した
bitClear(data, 32); -> 11111111111111111111111111111111
bitClear(data, 30); -> 10111111111111111111111111111111
ですから、すべての出力は正しいですが、msbをクリアしようとしたときは出力されません。
誰も同じような行動を経験していますか?