评估值是增加还是减少(arduino)

时间:2013-11-14 22:36:50

标签: arduino logic arduino-ide

我正在尝试学习如何评估值是增加还是减少。在这种情况下,我使用的是从0到14映射的电位计。基本上我需要它来查看当前值,如果当前值增加打印一件事,如果值正在减少打印别的东西。

到目前为止,这是我所拥有的,我知道它不对,但它是一个开始。

思想?

谢谢。

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 个答案:

答案 0 :(得分: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是否为false或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 :(得分: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...
}

答案 2 :(得分:0)

if (val++) {

表示将val的值与0进行比较,如果不是0则执行if块。同时增加val(无论是否为0开始)。

您似乎认为该声明会检查val是否已更改,但它不会。

如果你想这样做,(正如其他答案所示)你需要另一个变量来存储先前的val值,然后比较两者:

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