Arduino如果函数不能按预期工作

时间:2017-11-18 17:14:30

标签: arduino

我想在心率值介于两者之间时将变量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); } }

2 个答案:

答案 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。 关系运算符返回01作为输出。 因此,c>b>a可以写为(c>b)>a c>b = 30>20评估为True。输出将为1。 现在,1>a = 1>10评估为False