while循环运行多次并设置标志?

时间:2017-06-06 14:21:46

标签: c++ arduino

我无法将此循环仅运行一次。我有一个标志集,我的理解是它将运行一次,更改flag = 1,然后不再运行,但是当我执行它时,循环会一遍又一遍地运行。任何帮助表示赞赏。

编辑:我发现的问题是即使我的电压满足if语句,循环也继续运行。

voltage = analogRead(A0); //reads in voltage from pin A0
Serial.println(voltage);

//Calibration routine
do {
  if ((voltage >= 1) && (voltage <= 10)) {
    //while the voltage is between 4.88 and 48.8 mV the calibration light will flash once
    //this ensures the voltage is above 0 and lower than the threshold for the max voltage routine
    digitalWrite(calibrationLED, HIGH);
    delay(2000);
    digitalWrite(calibrationLED, LOW);
    delay(1000);
    digitalWrite(calibrationLED, HIGH);
    delay(2000);
    Serial.println("Calibrated");
    delay(5000);
    voltageInitial = analogRead(A0);
    //stores the initial voltage to a separate variable, does not change over the course of the crimp
    Serial.println("Initial Voltage: ");
    Serial.println(voltageInitial);
    flag = 1;
  }
} while (flag == 0);

4 个答案:

答案 0 :(得分:5)

如果flag条件为真,if变量将仅设置为1。当voltage的值为1到10时会发生这种情况。

如果voltage的值不在1 - 10范围内,则不会设置flag。由于voltage永远不会在循环内修改,因此你有一个无限循环。

答案 1 :(得分:4)

&#34;循环一遍又一遍地运行。 &#34; 它闻到了永远不会进入if ((voltage >= 1) && (voltage <= 10))内部的循环, 因此从未设置flag = 1;

很自然地它继续运行。

答案 2 :(得分:2)

实际上这是一个无限循环,直到电压值介于1到10之间。因此flag=1应该超出if条件。否则,您可以在条件完成后添加break。它会在条件后执行一次。

答案 3 :(得分:0)

您正在等待voltage变量更改,而不实际更改它(从模拟引脚读取)。

您需要将voltage = analogRead(A0);添加到循环中。

do
{
    voltage = analogRead(A0);
    if ((voltage >= 1) && (voltage <= 10))   //while the voltage is between 4.88 and 48.8 mV the calibration light will flash once
    {                                        //this ensures the voltage is above 0 and lower than the threshold for the max voltage routine 
        ...

        flag = 1;
    }
} while (flag == 0);