我无法将此循环仅运行一次。我有一个标志集,我的理解是它将运行一次,更改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);
答案 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);