Привет, у меня есть плата Arduino Uno, которую я недавно получил, и я пытаюсь запустить функцию секундомера на плате. У меня две мгновенные кнопки. Когда первая кнопка нажата, она хранит время, прошедшее в переменной startTime, так как программа начала использовать функцию millis(). Когда вторая кнопка нажата позже, она также сохраняет время, прошедшее с момента запуска программы, в переменной endTime, используя ту же самую функцию millis(). Затем он вычисляет timeElapsed, отбрасывая startTime от endTime.
Я использовал Serial.print между ними в попытке отладки. Я получаю значения startTime и endTime, которые я ожидаю, и они верны, однако значение elapsedTime не работает корректно.
Существует один ключ к проблеме. Истекшее время предназначено для возврата значения endTime-startTime. Однако то, что он всегда возвращает, это значение endTime-773. Я не уверен, что это значит, но я считаю, что это может быть полезной информацией для решения моей проблемы.
void setup(){
Serial.begin(9600); //start the Serial.moniter on the computer
pinMode(2, INPUT); //Set the button attached to pin 2 as an input
pinMode(3, INPUT); //Set the button attached to pin 3 as an input
}
void loop(){
int buttonStateTwo = digitalRead(2); //stores either a HIGH(button pressed) or LOW(button not being pressed) value
int buttonStateThree = digitalRead(3);
unsigned int startTime;
unsigned int endTime;
unsigned int elapsedTime;
if(buttonStateTwo == HIGH){ //if the button is pressed
startTime = millis();
Serial.print(" The start time is: ");
Serial.print(startTime);
delay(1000); //pause the program for a second
}
if(buttonStateThree == HIGH){
endTime = millis();
Serial.print(" The end time is: ");
Serial.print(endTime);
elapsedTime = endTime-startTime; //this returns an incorrect value
Serial.print(" The time elapsed is: ");
Serial.println(elapsedTime); //incorrect value
delay(1000);
}
}
Я был бы очень благодарен, если бы кто-то мог мне помочь, поскольку я много лет пытался решить проблему и использовал множество разных подходов.
Объявление переменных выполняется в loop()
. Это означает, что каждый loop()
вызывается библиотеками Arduino, эти переменные могут содержать произвольные значения, которые могут быть или не совпадать с значениями, которые они имели при последнем вызове loop()
. Вместо этого перемещайте объявления в область модуля (вне и перед loop()
), чтобы они создавались только один раз.