#arduino
#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);
}
}
Можете ли вы дать мне подсказку о том, как вычислить разницу между текущим значением time1 и последним значением (текущее time1-1) time1?
Спасибо!
Комментарии:
1. Я не понимаю, с чем ты борешься. ты знаешь миллиса, ты знаешь, как вычесть два значения… что еще вам нужно?
2. Я не знаю, как зарегистрировать предпоследнее (предпоследнее) значение времени, чтобы сделать разницу с текущим значением time 1.
3. Похоже, стандартная процедура Arduino
pulseIn()
делает то, что вы хотите. (ну, разделите на 1000, чтобы получить ms из usec).
Ответ №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 amp;amp; 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;
}
В качестве альтернативы вы могли бы использовать прерывание с нарастающим фронтом аналогичным образом.
Комментарии:
1. Спасибо за подсказку, она работает правильно. Мне нравится, как вы представляете свою идею, комментируете каждую строку кода, таким образом, я действительно понял, что нужно не только копировать и изменять код.
2. Я предлагаю вам использовать ручку и бумагу и записать шаги, которые вам нужно сделать. подумайте о маленьком человеке, который сидит внутри микроконтроллера. нарисуйте блок-схему и только затем переведите ее в код.
3. Спасибо за совет. Я буду запускать каждый тип с помощью ручки и бумаги.