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

0

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

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

Теги:
arduino
arduino-uno

1 ответ

1
Лучший ответ

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню