문제

안녕하세요, 최근에 얻은 Arduino Uno 보드가 있고 보드에서 스톱워치 기능을 실행하려고합니다. 나는 두 개의 순간적인 푸시 버튼이 있습니다. 첫 번째 버튼을 누르면 프로그램이 Millis () 펑크 톤을 사용하기 시작한 이후 시작 시간 변수에서 전달 된 시간을 저장합니다. 두 번째 버튼을 나중에 누르면 동일한 millis () 함수를 사용하여 endtime 변수에서 프로그램이 실행되기 시작한 시간을 저장합니다. 그런 다음 시작 시간을 끝없이 멀리 가져 와서 시간 캡처를 계산합니다.

나는 디버깅 노력으로 serial.Print를 사용했습니다. 시작 시간과 엔드 타임 값이 기대하고 올바른 것은 있지만, eLapsedTime 값이 올바르게 작동하지 않는 것 같습니다.

문제에 대한 단서가 하나 있습니다. 경과 된 시간은 endtime-startTime 값을 반환하는 것을 의미합니다. 그러나 항상 internally 대신 반환하는 것은 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);
  }
}
.

나는 문제를 해결하고 많은 다른 접근법을 가져 갔다.

도움이 되었습니까?

해결책

변수의 선언은 loop()에서 수행됩니다.즉, Arduino 라이브러리에 의해 loop()가 호출 될 때마다 이러한 변수는 loop()가 마지막으로 호출 될 때 사용한 값과 동일하지 않을 수도있는 임의의 값을 포함 할 수 있습니다.선언문을 대신 모듈 범위로 이동 (loop() 외부 및 전에) 한 번만 생성되도록하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top