2013-11-14 8 views
5

Ich versuche zu lernen, wie man bewertet, ob ein Wert zunimmt oder abnimmt. In diesem Fall verwende ich ein Potentiometer von 0 - 14. Im Grunde brauche ich es, um den aktuellen Wert zu sehen, und wenn der aktuelle Wert zunimmt, drucke eine Sache, und wenn der Wert abnimmt, drucke etwas anderes.Bewerten, ob ein Wert steigt oder sinkt (Arduino)

Hier ist, was ich bisher habe, ich weiß es nicht richtig, aber es ist ein Anfang.

Gedanken?

Vielen Dank.

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 

Antwort

3

Deklaration von Variablen

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

ich dir nicht empfehlen abnehmend auf Deklarieren Sie Variablen in der loop()-Funktion, wenn Sie sie einmal außerhalb deklarieren können:

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

     ... 

Zunahme/Abnahme Kontrollen

In C++ Sie sogar in einer bedingten Anweisung eine Zuordnung vornehmen können. if (val++) und if (val--) werden nicht tun, was Sie erwarten. Die if-Anweisung überprüft, ob val nicht falsch oder 0 ist, und dann ++ erhöht es um 1. Das Gleiche gilt für val--, aber abnehmend um -1.

Was Sie tun können, ist den vorherigen Wert in einer anderen Variablen zu halten (wir prev sagen), um es zu vergleichen, später wie folgt aus:

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

die Variablen außerhalb der Schleife Deklarieren erklärt globale Variablen . Dies wird allgemein als schlechte Praxis angesehen. Sie in der Schleife zu deklarieren hat keinerlei Geschwindigkeitsbegrenzungen. GCC ist schlau genug, um herauszufinden, wie man es am besten kompiliert. –

0

Sie haben den aktuellen Wert mit dem alten Wert zu vergleichen, um zu bestimmen, ob er steigt oder

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

Mittel vergleichen den Wert von val-0, und wenn es ist nicht 0 führe den if-Block aus. Erhöhen Sie auch val (ob es 0 war oder nicht).

Sie scheinen zu denken, dass diese Anweisung überprüft, ob Val sich geändert hat, aber es nicht tut.

Wenn Sie das tun wollen, (wie andere Antworten vorschlagen) benötigen Sie eine andere Variable, um den vorherigen Wert von val zu speichern, und dann vergleichen die beiden:

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