Arduino 输入信号的两个高电平状态之间的时间

Arduino 输入信号的两个高电平状态之间的时间,arduino,Arduino,我试图在Arduino Uno中制作一个程序,它可以计算相同输入的两个高状态之间的时间间隔(单位:mills)。 int V1; long int time1; long int time2; long int interval1; long int lastvalue; void setup (){ pinMode(2, INPUT); Serial.begin(9600); } void loop() { V1 = digitalRead(2); // reading st

我试图在Arduino Uno中制作一个程序,它可以计算相同输入的两个高状态之间的时间间隔(单位:mills)。

int V1;

long int time1;
long int time2;
long int interval1;
long int lastvalue;

void setup (){
  pinMode(2, INPUT);
  Serial.begin(9600);
}
 void loop() {
  V1 = digitalRead(2); // reading state of input 2

  if (V1 ==HIGH) {
    Serial.print("Event occure: ");
    time1 = millis();
    Serial.print(time1);
    delay(500);
    
    interval1= time1 - lastvalue;
    Serial.print("difference between previous time1 and current time1 (in mills): ");
    Serial.print(interval1);
    
  }
 }
你能告诉我怎么计算time1的当前值和time1的最后一个值(当前time1-1)之间的差值吗


谢谢大家!

你可以这样做

unsigned long lastTime = 0;
int lastVal = HIGH;
int val = LOW;

void setup (){
  pinMode(2, INPUT);
}

void loop() {
  // read the current input value
  val = digitalRead(2);
  // if the value has changed since last time and is HIGH
  if(val != lastVal && val){

    // get current time
    unsigned long currTime = millis();
    // calculate difference to last time
    unsigned long timeDiff = currTime - lastTime;
    // get a new lastTime for next high
    lastTime = currTime;
    }
    // update lastVal so we know the input changed
    lastVal = val;  
 }

或者,您也可以以类似的方式使用具有上升沿的中断。

我不明白您正在努力解决的问题。你知道米利斯,你知道如何减去两个值。。。您还需要什么?我不知道如何注册最后一个(倒数第二个)时间值,以便与当前值time 1产生差异。这听起来像是标准的Arduino例程
pulseIn()
实现了您想要的功能。(好的,除以1000从usec获得ms)。谢谢你的提示,它工作正常。我喜欢你表达想法的方式,评论每一行代码,这样我就真正理解了不仅仅是复制和修改代码。我建议你用笔和纸写下你必须做的步骤。想想一个坐在微控制器里的小个子男人。画一个流程图,然后把它翻译成代码。谢谢你的建议。我会用一支笔和一张纸开始每一种打字。