ボタンを押して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);
     }

}