我想在心率值介于两者之间时将变量H_algo
设置为0.5(45H_algo应设置为1.还有其他心率值的H_algo = 0.但问题是{{1当心率值超过65或低于45并且它保持在H_algo
状态时,它不会改变。
这是我的代码:
if(45<H_val<65)
此代码几天前完美运行。但是当我现在检查它时,它总是在心率超过65时打印void loop() {
H_val = HeartRate();
// return heart rate value by this function and save to H_val
Serial.print("Heart rate ");
Serial.println(H_val);
if(45 < H_val < 65) {
// calculate the H_algo value
D_time = millis();
if(D_time - pre1_time >= 1200 ) {
//check whether heart rate value stay between 45 ad 65 more than 1.2 seconds
H_algo = 1;
Serial.print("H_algo ");
Serial.println(H_algo);
} else {
H_algo = 0.5;
Serial.print("H_algo ");
Serial.println(H_algo);
}
} else {
H_algo = 0;
pre1_time = millis();
Serial.print("H_algo ");
Serial.println(H_algo);
}
}
。
答案 0 :(得分:4)
你的问题可能就在这里:
45 < H_val < 65
在C / C ++中,此表达式的含义与您预期的不同。首先,它检查45是否小于H_val
。然后它将得到的布尔值的整数值与65进行比较。这是有效的C / C ++代码,但没有任何意义。
您要比较的是:
45 < H_val && H_val < 65
答案 1 :(得分:0)
让我用一个例子来清楚它,
int a=10,b=20,c=30;
if(c>b>a)
printf("Yes");
else
printf("No");
输出为No
。
关系运算符返回0
或1
作为输出。
因此,c>b>a
可以写为(c>b)>a
c>b
= 30>20
评估为True
。输出将为1
。
现在,1>a
= 1>10
评估为False
。