我正在尝试制作一个简单的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);
}
答案 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;
}