我有一个程序可以检查模拟引脚上的电压是否低于设定电压(3V),如果有,它会在等待3分钟后连续打印一个数字。
void loop() {
// read the input on analog pin 0:
int sensorValue = analogRead(A0);
// Convert the analog reading (which goes from 0 - 1023) to a voltage (0 - 5V):
float voltage = sensorValue * (5.0 / 1023.0);
// print out the value you read:
if(voltage < 3.00) {
delay(180000);
Serial.println("8");
}
}
我要做的是,如果电压在3分钟之前上升(> = 3V),则不应该在串行上打印数字。怎么做?
答案 0 :(得分:1)
您必须从命令式顺序代码切换到更基于事件的方法。跟踪上次您看到电压是否保持在阈值以上,同时保持循环;当经过的时间超过3分钟时,打印该值并重置计时器(以避免在每次迭代时打印)。
顺便说一下,如果你避免浮点转换(在Arduino上完全用软件模拟)并且只是与正确的整数值进行比较,那么你的代码可以更高效(不管它在这里是否重要)。unsigned long last_good = 0;
const int threshold = 1023 * 3 / 5;
const unsigned long grace_time = 180000;
void loop() {
int aread = analogRead(A0);
if(aread > threshold) last_good = millis();
// unsigned difference works fine even on wraparound
if(millis() - last_good > grace_time) {
Serial.println("8");
last_good = millis();
}
}