Pergunta

Olá, tenho uma placa Arduino Uno que comprei recentemente e estou tentando executar uma função de cronômetro na placa.Eu tenho dois botões momentâneos.Quando o primeiro botão é pressionado ele armazena o tempo decorrido, na variável startTime, desde que o programa começou a usar a função millis().Quando o segundo botão é pressionado posteriormente, ele também armazena o tempo decorrido desde que o programa começou a ser executado, na variável endTime, usando a mesma função millis().Em seguida, ele calcula o timeElapsed retirando o startTime do endTime.

Usei o Serial.print em um esforço para depurar.Recebo os valores startTime e endTime esperados e eles estão corretos, porém meu valor elapsedTime não parece estar funcionando corretamente.

Há uma pista sobre o problema.O tempo decorrido destina-se a retornar o valor de endTime-startTime.No entanto, o que sempre retorna é o valor de endTime-773.Não tenho certeza do que isso significa exatamente, mas acredito que possa ser uma informação útil para ajudar a resolver meu problema.

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);
  }
}

Eu ficaria muito grato se alguém pudesse me ajudar, pois há muito tempo tentei resolver o problema e tomei muitas abordagens diferentes.

Foi útil?

Solução

A declaração das variáveis ​​é realizada em loop().Isto significa que cada vez loop() é chamado pelas bibliotecas do Arduino, essas variáveis ​​​​podem conter valores arbitrários que podem ou não ser iguais aos valores que tinham quando loop() foi chamado pela última vez.Em vez disso, mova as declarações para o escopo do módulo (fora e antes loop()) para que sejam criados apenas uma vez.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top