ボタンを押してSTART、もう一度押してSTOPして時間を計測します。
ボタンはアルディーノのプルアップを使用しました!
押されたときにLOWになります。
計測中とそれ以外を見分けるフラグを変数で用意しました!
<実行結果>
START
mode_flg=1
STOP_millis = 7243
TIME= 7.24
mode_flg=0
<プログラム>
unsigned long time_mil; //変数定義
unsigned long time_mic; //変数定義
unsigned long time_1; //変数定義
int mode_flg = 0; //フラグのため
float count_s; //秒で表示するために用意する変数
void setup() {
pinMode(2,INPUT_PULLUP);
Serial.begin(9600); //シリアル通信のデータ転送レートを9600bpsで指定
}
void loop() {
time_mil = millis(); //millis()関数の戻り値を変数に格納
//time_mic = micros(); //micros()関数の戻り値を変数に格納
//最初にボタンが押されたらSTART
if(digitalRead(2) == LOW && mode_flg == 0){
Serial.println("START");
time_1 =millis(); //STARTの時間というか時刻を代入
//Serial.println(time_1);
mode_flg =1;//フラグを1にする
Serial.print("mode_flg=");
Serial.println(mode_flg); //フラグの確認
delay(300);
}
//2回目はSTOP、おなじボタンでフラグが1のときに実行
if(digitalRead(2) == LOW && mode_flg == 1){
time_mil = millis()- time_1; //STARTからの時間を計算
Serial.print(" STOP_millis = ");
Serial.println(time_mil); //計測時間を測定
count_s = (float)time_mil/1000; //秒に表示するために行う計算
Serial.print(" TIME= ");
Serial.println(count_s); //計測時間を秒で表示
mode_flg =0; //フラグを戻す
Serial.print("mode_flg=");
Serial.println(mode_flg); //フラグの確認
delay(300);
}
}