2013-11-14 8 views
5

Próbuję dowiedzieć się, jak ocenić, czy wartość rośnie, czy maleje. W tym przypadku używam potencjometru odwzorowanego od 0 do 14. Zasadniczo potrzebuję go, aby przyjrzeć się bieżącej wartości, a jeśli aktualna wartość wzrasta, należy wydrukować jedną rzecz, a jeśli wartość maleje, wydrukować coś innego.Oceń, czy wartość rośnie lub maleje (arduino)

Oto, co mam do tej pory, wiem, że nie jest w porządku, ale jest to początek.

Myśli?

Dziękuję.

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 

Odpowiedz

3

deklaracji zmiennych

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

Nie zalecamy zadeklaruj zmienne w funkcji loop(), jeśli możesz je zadeklarować na zewnątrz raz:

// 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 

     ... 

zwiększyć/zmniejszyć sprawdza

W C++ można zrobić zadanie nawet w instrukcji warunkowej. if (val++) i if (val--) nie zrobią tego, czego oczekujesz. Instrukcja if sprawdza, czy val nie jest fałszywa lub 0, a następnie ++ zwiększa ją o 1. To samo dla val--, ale zmniejsza się o -1.

Co można zrobić, to zachować poprzednią wartość w innej zmiennej (powiedzmy prev), aby porównać go później tak:

// 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

Deklarowanie zmiennych poza pętlą deklaruje zmienne globalne . Jest to powszechnie uważane za złą praktykę. Zgłaszanie ich w pętli nie ma żadnych kar za szybkość. GCC jest na tyle sprytny, aby dowiedzieć się, jak najlepiej go skompilować. –

0

Trzeba porównać bieżącą wartość ze starej wartości w celu określenia, czy jest zwiększenie lub zmniejszenie

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++) { 

środki porównać wartość val 0, a jeśli to nie jest 0 wykonanie bloku if. Zwiększ także wartość val (niezależnie od tego, czy od początku było 0, czy nie).

Wydaje się, że myślisz, że to stwierdzenie sprawdza, czy val się zmienił, ale tak nie jest.

Jeśli chcesz to zrobić, (jak inne odpowiedzi sugerują) trzeba innej zmiennej do przechowywania poprzednią wartość val, a następnie porównać te dwa:

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