5

我正在尝试学习如何评估一个值是增加还是减少。在这种情况下,我使用的是从 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
4

3 回答 3

4

变量声明

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

}
于 2013-11-14T23:23:59.570 回答
0
if (val++) {

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

您似乎认为该语句检查 val 是否已更改,但事实并非如此。

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

if (val > oldval) 
{ 
   Serial.println("Up\n");
}
于 2013-11-15T10:56:48.690 回答
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...
}
于 2013-11-14T23:03:17.970 回答