Код Arduino Uno создает неверные значения времени

Здравствуйте, у меня есть плата 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);
}
}

Я был бы очень благодарен, если бы кто-то мог помочь мне, потому что я много лет пытался решить эту проблему и использовал много разных подходов.

0

Решение

Объявление переменных выполняется в loop(), Это означает, что каждый раз loop() вызывается библиотеками Arduino, эти переменные могут содержать произвольные значения, которые могут совпадать или не совпадать со значениями, которые они имели при loop() последний раз звонил. Вместо этого переместите объявления в область видимости модуля (вне и перед loop()) так что они создаются только один раз.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector