O código Arduino Uno cria valores de tempo incorretos
-
21-12-2019 - |
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.
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.