可以串行打印每个输出高的毫秒数。假设我写了一个代码analogRead。如果analogread大于600,那么digitalwrite 13,high。如果输出引脚13为高电平,则捕获如何毫秒直到引脚13转到低电平。
我尝试使用millis()但它无法重置为零......无论如何将millis()重置为零?
答案 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中。将它存储在很长时间内是一种很好的做法。