C ++如果那么无法工作/停止

时间:2013-07-07 22:05:16

标签: c++ loops if-statement arduino

我正在尝试制作一个简单的Arduino代码,当光电管读数小于900时,它会将1加到CurrentNumber并显示在4位7段显示器上。问题是即使它的读数超过1000,也不会停止添加。

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);
}

1 个答案:

答案 0 :(得分:6)

您的问题出在if条件中:

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

你基本上做的是:将photocellReading的位向左移10(相当于乘以2 ^ 10又称1024)。 很可能这意味着唯一一次这是假的,如果photocellReading的值是0开始。 (我说很可能是因为它取决于比特是否循环回来,但这并不完全相关)。

tl; dr你的代码概念等同于:

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

我猜你想做什么(考虑你减去1023,巧合的是1024 - 1)是:

if(photocellReading < 1024){ // again 1024 == 2^10
    CurrentNumber = CurrentNumber + 1;
}