输入 Arduino 的两个高状态之间的时间
Time between two High state of an input Arduino
我正在尝试在 Arduino Uno 中制作一个程序,它可以计算相同输入的两个高状态之间的 时间间隔(以毫秒为单位)。
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);
}
}
你能告诉我如何计算时间 1 的当前值和时间 1 的最后一个值(当前时间 1-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;
}
或者,您可以使用类似方式的上升沿中断。
我正在尝试在 Arduino Uno 中制作一个程序,它可以计算相同输入的两个高状态之间的 时间间隔(以毫秒为单位)。
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);
}
}
你能告诉我如何计算时间 1 的当前值和时间 1 的最后一个值(当前时间 1-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;
}
或者,您可以使用类似方式的上升沿中断。