2013-11-14 6 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 (с начала или нет).

Вы, кажется, думаете, что это утверждение проверяет, изменился ли val, но это не так.

Если вы хотите, чтобы сделать это (как и другие ответы предполагают), необходимо еще одну переменную для хранения предыдущего значения val, а затем сравнить два:

if (val > oldval) 
{ 
    Serial.println("Up\n"); 
} 
Смежные вопросы