1

フォトセルの読み取り値が 900 未満の場合の簡単な Arduino コードを作成しようとしています。CurrentNumber に 1 を追加し、4 桁の 7 セグメント ディスプレイに表示します。問題は、1000 を超えて読み取っていても 1 を追加するのをやめないことです。

void loop() {
 photocellReading = analogRead(photocellPin);  
 Serial.print("Analog reading = ");
 Serial.println(photocellReading);    // the raw analog reading
 photocellReading = 1023 - photocellReading;

 if(photocellReading << 10){
 CurrentNumber = CurrentNumber + 1;
 }

 displayNumber(CurrentNumber);
}
4

1 に答える 1

6

問題は if 条件にあります:

 if(photocellReading << 10){
     CurrentNumber = CurrentNumber + 1;
 }

彼が本質的に行っていることは、photocellReading のビットを左に 10 シフトすることです (これは 2^10 別名 1024 を掛けることに相当します)。ほとんどの場合、これが false になるのは、最初から photocellReading の値が 0 だった場合のみです。(ビットがループバックするかどうかに依存するため、最も可能性が高いと言いますが、これは完全には関係ありません)。

tl;drあなたのコードは概念的には次のものと同等です:

if((photocellReading * 1024) != 0){
    CurrentNumber = CurrentNumber + 1;
}

あなたがやりたかったことは次のとおりです (偶然にも 1024 - 1 である 1023 を引いたことを考慮して) は次のとおりです。

if(photocellReading < 1024){ // again 1024 == 2^10
    CurrentNumber = CurrentNumber + 1;
}
于 2013-07-07T22:15:33.233 に答える