Question

Bonjour, j'ai un Arduino Uno conseil que j'ai reçu récemment et je suis en train de lancer un chronomètre sur le conseil d'administration.J'ai deux boutons-poussoirs momentanés.Lorsque le premier bouton est pressé, il enregistre la quantité de temps qui a passé, dans le startTime variable, depuis le début du programme à l'aide de la millis() due.Lorsque le deuxième bouton est enfoncé plus tard, il stocke également la quantité de temps qui s'est écoulé depuis le début du programme en cours d'exécution, à la fin des temps variable, en utilisant la même millis() fonction.Il calcule ensuite le timeElapsed en prenant le startTime loin de la fin des temps.

J'ai utilisé de la Série.imprimer entre dans un effort pour déboguer.Je reçois le startTime et endTime valeurs que je recherche et qu'ils sont corrects, mais mon elapsedTime valeur ne semble pas fonctionner correctement.

Il y a une idée sur le problème.Le temps écoulé est destiné à retourner la valeur de endTime-startTime.Cependant ce qu'elle renvoie toujours à la place qui est la valeur de endTime-773.Im pas sûr de ce que cela signifie exactement, mais je crois qu'il pourrait être utile d'informations pour aider à résoudre mon problème.

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

Je serais très reconnaissante si quelqu'un pouvait m'aider car j'ai essayé d'âges à travailler sur le problème et ont pris de nombreuses approches différentes.

Était-ce utile?

La solution

La déclaration des variables est effectuée dans loop().Cela signifie que chaque fois que loop() est appelé par l'Arduino bibliothèques, ces variables peuvent contenir des valeurs arbitraires qui peuvent ou peuvent ne pas être les mêmes que les valeurs qu'ils avaient quand loop() a été appelé en dernier.Déplacer les déclarations à la portée de module à la place (en dehors et avant loop()), de sorte qu'ils sont créés uniquement pour une fois.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top