const int pinSw = 2; //入力スイッチ //7セグピン const int pin7segA = 6; const int pin7segB = 7; const int pin7segC = 8; const int pin7segD = 9; const int pin7segE = 10; const int pin7segF = 12; const int pin7segG = 13; //7セグ桁制御 const int pin7segDig4 = 5; const int pin7segDig3 = 3; //エッジ検出 int swPrevState = 0; //1つ前のスイッチ状態 int swCurrState = 0; //現在のスイッチ状態 int detectUpEdge = 0; //立ち上がりエッジ検出 //スイッチカウンター値 int ctSw = 0; //時間 long timeNow; //現在時刻 long timeStart = millis(); //タイマー開始時刻 long timeDisp; //表示時刻 int numDisp[2]; //LEDに表示する数字 int i; void setup() { //入出力の初期化 pinMode( pinSw, INPUT ); pinMode( pin7segA, OUTPUT ); pinMode( pin7segB, OUTPUT ); pinMode( pin7segC, OUTPUT ); pinMode( pin7segD, OUTPUT ); pinMode( pin7segE, OUTPUT ); pinMode( pin7segF, OUTPUT ); pinMode( pin7segG, OUTPUT ); pinMode( pin7segDig4, OUTPUT ); pinMode( pin7segDig3, OUTPUT ); //デバッグ用シリアル Serial.begin(9600); } void loop() { //立ち上がりエッジ検出 swCurrState = digitalRead(pinSw); //現在のスイッチ状態 if( swCurrState==HIGH && swCurrState!=swPrevState ) //現在のスイッチ状態と一つ前のスイッチ状態を比較 detectUpEdge = 1; else detectUpEdge = 0; swPrevState = swCurrState; //一つ前のスイッチ状態 //表示時刻の取得 if( detectUpEdge == 1 ) //スイッチが押された場合はタイマー開始時刻をリセット timeStart = millis(); timeNow = millis(); //現在時刻の取得 timeDisp = ( (timeNow-timeStart)/1000 ); //開始時刻と現在時刻の差が表示時刻 for( i=0; i<2; i++ ){ //表示時刻から桁表示の数字を求める numDisp[i] = timeDisp % 10; timeDisp = timeDisp / 10; } //7セグLEDの制御 for( i=0; i<2; i++ ){ switch(i){ case 1: digitalWrite(pin7segDig4 , HIGH ); digitalWrite(pin7segDig3 , LOW ); break; default : digitalWrite(pin7segDig4 , LOW ); digitalWrite(pin7segDig3 , HIGH ); break; } switch(numDisp[i]){ case 1: digitalWrite(pin7segA , LOW ); digitalWrite(pin7segB , HIGH ); digitalWrite(pin7segC , HIGH ); digitalWrite(pin7segD , LOW ); digitalWrite(pin7segE , LOW ); digitalWrite(pin7segF , LOW ); digitalWrite(pin7segG , LOW ); break; case 2: digitalWrite(pin7segA , HIGH ); digitalWrite(pin7segB , HIGH ); digitalWrite(pin7segC , LOW ); digitalWrite(pin7segD , HIGH ); digitalWrite(pin7segE , HIGH ); digitalWrite(pin7segF , LOW ); digitalWrite(pin7segG , HIGH ); break; case 3: digitalWrite(pin7segA , HIGH ); digitalWrite(pin7segB , HIGH ); digitalWrite(pin7segC , HIGH ); digitalWrite(pin7segD , HIGH ); digitalWrite(pin7segE , LOW ); digitalWrite(pin7segF , LOW ); digitalWrite(pin7segG , HIGH ); break; case 4: digitalWrite(pin7segA , LOW ); digitalWrite(pin7segB , HIGH ); digitalWrite(pin7segC , HIGH ); digitalWrite(pin7segD , LOW ); digitalWrite(pin7segE , LOW ); digitalWrite(pin7segF , HIGH ); digitalWrite(pin7segG , HIGH ); break; case 5: digitalWrite(pin7segA , HIGH ); digitalWrite(pin7segB , LOW ); digitalWrite(pin7segC , HIGH ); digitalWrite(pin7segD , HIGH ); digitalWrite(pin7segE , LOW ); digitalWrite(pin7segF , HIGH ); digitalWrite(pin7segG , HIGH ); break; case 6: digitalWrite(pin7segA , HIGH ); digitalWrite(pin7segB , LOW ); digitalWrite(pin7segC , HIGH ); digitalWrite(pin7segD , HIGH ); digitalWrite(pin7segE , HIGH ); digitalWrite(pin7segF , HIGH ); digitalWrite(pin7segG , HIGH ); break; case 7: digitalWrite(pin7segA , HIGH ); digitalWrite(pin7segB , HIGH ); digitalWrite(pin7segC , HIGH ); digitalWrite(pin7segD , LOW ); digitalWrite(pin7segE , LOW ); digitalWrite(pin7segF , HIGH ); digitalWrite(pin7segG , LOW ); break; case 8: digitalWrite(pin7segA , HIGH ); digitalWrite(pin7segB , HIGH ); digitalWrite(pin7segC , HIGH ); digitalWrite(pin7segD , HIGH ); digitalWrite(pin7segE , HIGH ); digitalWrite(pin7segF , HIGH ); digitalWrite(pin7segG , HIGH ); break; case 9: digitalWrite(pin7segA , HIGH ); digitalWrite(pin7segB , HIGH ); digitalWrite(pin7segC , HIGH ); digitalWrite(pin7segD , HIGH ); digitalWrite(pin7segE , LOW ); digitalWrite(pin7segF , HIGH ); digitalWrite(pin7segG , HIGH ); break; default : //0 digitalWrite(pin7segA , HIGH ); digitalWrite(pin7segB , HIGH ); digitalWrite(pin7segC , HIGH ); digitalWrite(pin7segD , HIGH ); digitalWrite(pin7segE , HIGH ); digitalWrite(pin7segF , HIGH ); digitalWrite(pin7segG , LOW ); break; } delay(5); } }