質問

こんにちは私は最近手に入ったArduino Unoボードを持っていて、私はボード上のストップウォッチ機能を実行しようとしています。私は2つの瞬間的な押し押さえを持っています。最初のボタンを押すと、プログラムがMillis()Functonを使用していたので、渡された時間をスタートタイム変数に格納します。後で2番目のボタンを押すと、プログラムが実行されてから渡された時間が同じMillis()関数を使用して、endTime変数に格納されます。その後、STARTTIMEを終了時刻から離して、タイムラップを計算します。

デバッグに努めて、Serial.printを使用しました。私は私が期待しているスタートイムと終了値の値を取得し、それらが正しいですが、私の経過時間値は正しく機能していないようです。

問題に関しては手がかりが1つあります。 経過時間は、endtime-startTimeの値を返すことを意味します。 ただし、常に返されるものは、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()で実行されます。これは、loop()がARDUINOライブラリによって呼び出されるたびに、これらの変数は任意の値を含めることができます。宣言をモジュールのスコープに移動します(loop()の前と前に)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top