Arduino电压检查

时间:2018-04-20 05:45:08

标签: arduino

我有一个程序可以检查模拟引脚上的电压是否低于设定电压(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),则不应该在串行上打印数字。怎么做?

1 个答案:

答案 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();
    } 
}