2013-11-14 85 views
5

我在學習如何評估值是增加還是減少。在這種情況下,我使用了一個從0到14映射的電位計。基本上我需要它來查看當前值,如果當前值正在增加,則打印一件事情,如果該值正在減少,則打印其他值。評估值是增加還是減少(arduino)

這是我到目前爲止,我知道它不對,但它的一個開始。

想法?

謝謝。

void setup() { 
    Serial.begin(9600); 
} 


void loop() { 

    int val = analogRead(A0); // read the input on analog pin 0: 
    val = map(val, 0, 1023, 0, 14); // map the vlaues to new values 
    Serial.println(val); // print those values 
    delay(1); // delay by a second. 

    // sudo code 

    if (val++) { 

    Serial.println("up"); 

    } else if (val--){ 

    Serial.print("down"); 

    }else{ 

    // do nothing 
    } 
}// end loop 

回答

3

變量的聲明

int val = analogRead(A0); // read the input on analog pin 0: 

,我不建議你當您可以在外部聲明它們時,在loop()函數中聲明變量:

// declaration here! 
int val = 0; 

void setup() { 
    Serial.begin(9600); 
} 

void loop() { 

    // just set the value 
    val = analogRead(A0); // read the input on analog pin 0: 
    val = map(val, 0, 1023, 0, 14); // map the vlaues to new values 

     ... 

增加/減少檢查

在C++中,即使在條件語句中也可以進行賦值。 if (val++)if (val--)不會做你期望的。 if語句檢查val是否爲假或0,然後++將其增加1.與val--相同,但減少-1。

你可以做的就是保持先前的值在另一個變量(假設prev)後,比較像這樣:

// declaration here! 
int val = 0; 
int prev; 

    ... 

void loop() { 

    // keep the previous value 
    prev = val; 

    // just set the value 
    val = analogRead(A0); // read the input on analog pin 0: 

    ... 

    // compare the previous value 
    if (val > prev) { 
     Serial.println("up"); 
    } else if (val < prev) { 
     Serial.println("down"); 
    } 

    // and no need to leave empty an `else` block 

} 
+1

聲明外循環的變量聲明全局變量。這通常被認爲是不好的做法。在循環中聲明它們不受任何速度懲罰。 GCC足夠聰明,能夠弄清楚如何最好地編譯它。 –

0

你要比較舊值的電流值,以確定它是否增加或減少

void setup() { 
    Serial.begin(9600); 
    int oldvalue = 0; 

} 


void loop() { 

    int val = analogRead(A0); // read the input on analog pin 0: 
    if(val > oldvalue) 
    { 
    // increasing 
    } 
    else if (val < oldvalue) 
    { 
    // decreasing 
    } 

    // get current value into oldvalue for next comparison 
    oldvalue = val; 

    // other code follows here... 
} 
0
if (val++) { 

手段val值比較爲0,如果它不是0執行if塊。也增加val(不管它是否爲0開頭)。

您似乎認爲該語句會檢查val是否已更改,但事實並非如此。

如果你想這樣做,(其它答案建議),你需要另一個變量來存儲val以前的值,然後比較兩個:

if (val > oldval) 
{ 
    Serial.println("Up\n"); 
}