2013-07-07 20 views
1

我想做一个简单的Arduino代码,当光电池读数小于900时,它会将1添加到CurrentNumber并将其显示在4位7段显示器上。问题是,它不会停止添加一个即使它的阅读超过1000C++如果然后不会工作/停止

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

'if(photocellReading << 10){'这条线对我很可疑。你将位向左移动10倍,实际上乘以2^10。这是打算? – Borgleader

+0

我不明白你的描述。但我很确定你想要'<',而不是'<<'。 –

+0

'photocellReading'的类型是什么? – dmckee

回答

6

你的问题是你的,如果条件:

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

什么你基本上做他:移位光电池的位向左读取10(相当于乘以2^10 10 1024)。 最有可能的是这意味着唯一的时间会是假的,如果photocellReading的值是0开始。 (我说最有可能是因为它取决于位是否循环回去,但这不完全相关)。

文艺青年最爱的你的代码是概念等同于:

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

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

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

从概念上说,是的,它等于那个,但是还有一个副作用:如果较小的22位是0,则表达式将评估为假(但是给定该变量的可能值,这应该不会发生) –

+0

@ Magtheridon96感谢您指出这一点,我做了一个小小的编辑以澄清情况。 – Borgleader