Frage

Hallo, ich habe ein Arduino Uno-Board, das ich mir vor kurzem zugelegt habe, und ich versuche, eine Stoppuhrfunktion auf dem Board auszuführen.Ich habe zwei Taster.Wenn die erste Taste gedrückt wird, wird in der Variable startTime die Zeitspanne gespeichert, die vergangen ist, seit das Programm mit der Verwendung der Funktion millis() begonnen hat.Wenn später die zweite Taste gedrückt wird, speichert es mit derselben millis()-Funktion auch die Zeit, die seit dem Start des Programms vergangen ist, in der Variablen endTime.Anschließend wird die verstrichene Zeit berechnet, indem die Startzeit von der Endzeit abgezogen wird.

Ich habe zwischendurch Serial.print zum Debuggen verwendet.Ich erhalte die erwarteten startTime- und endTime-Werte und sie sind korrekt, allerdings scheint mein elapsedTime-Wert nicht richtig zu funktionieren.

Es gibt einen Hinweis auf das Problem.Die verstrichene Zeit soll den Wert von endTime-startTime zurückgeben.Stattdessen wird jedoch immer der Wert von endTime-773 zurückgegeben.Ich bin mir nicht sicher, was das genau bedeutet, aber ich glaube, dass es nützliche Informationen sein könnten, die mir bei der Lösung meines Problems helfen könnten.

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

Ich wäre sehr dankbar, wenn mir bitte jemand helfen könnte, da ich seit Ewigkeiten versucht habe, das Problem zu lösen, und dabei viele verschiedene Ansätze gewählt habe.

War es hilfreich?

Lösung

Die Deklaration der Variablen erfolgt in loop().Das heißt jedes Mal loop() von den Arduino-Bibliotheken aufgerufen wird, können diese Variablen beliebige Werte enthalten, die mit den Werten, die sie zu diesem Zeitpunkt hatten, identisch sein können oder auch nicht loop() wurde zuletzt angerufen.Verschieben Sie die Deklarationen stattdessen in den Modulbereich (außerhalb und vor loop()), sodass sie nur einmal erstellt werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top