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