如何在arduino中捕获毫秒

时间:2015-07-23 13:09:46

标签: arduino

可以串行打印每个输出高的毫秒数。假设我写了一个代码analogRead。如果analogread大于600,那么digitalwrite 13,high。如果输出引脚13为高电平,则捕获如何毫秒直到引脚13转到低电平。

我尝试使用millis()但它无法重置为零......无论如何将millis()重置为零?

2 个答案:

答案 0 :(得分:0)

你需要一个变量来跟踪事件之间的millis()数量,有点像秒表:你需要记住你开始计算,所以你可以在停止时测量差异。

这里有一个快速草图来说明这个想法。代码未在Arduino上进行测试,但您应该能够从评论中理解这个概念:

long lastTime;
int ledState = 0;

void setup() {
  Serial.begin(115200);
  pinMode(13,OUTPUT);
}

void loop() {
  int analogValue = analogRead(0);
  int newLedState = (analogValue > 600);//need to check, hoping boolean will evaluat to 1 when true

  if(ledState == 0 && newLedState == 1){//if the led was of, but will be turned on, start the stop watch
    lastTime = millis();//store the current time
    ledState = newLedState;
  }

  if(ledState == 1 && newLedState == 0){//if the led was on, but will be turned off, get the difference between the last time we started counting time
    long difference = millis() - lastTime; //get the current time, but subtract the last stored time
    ledState = newLedState;
    Serial.println(difference);
  }

  digitalWrite(13,ledState);
}

答案 1 :(得分:0)

好的,所以我想我明白你的意思。您希望捕获2个引脚之间的时间差,从而改变其电气状态。为此,您可以使用pulseIn()

在你的问题中使用你的例子,我们得到......

if (13 == HIGH) {
millis = pulseIn(13, LOW);
}

这将为您提供引脚变高然后变低的持续时间,存储在变量millis中。将它存储在很长时间内是一种很好的做法。