夢追い人

"It takes a dreamer to make a dream come true."―Vincent Willem van Gogh

FallTime ver.0.01

FallTimeの数字表示も合わせたコードが出来ました。

まだ、動くには程遠いですが・・・


一応アドバイスなども欲しいので、コード&回路図を載せておきます。

// Falling's Timer ver.0.01 : 二個のセンサーを用意する
// ひとつはタクトスイッチ、もうひとつはCdSセル
// タクトスイッチでストップウォッチ開始し、
// CdSセルがオンになったところで、ストップウォッチを止める
// 時間表示も含めたテストコード

#define BEGIN_button 13   // タクトスイッチを接続したピン
#define STOP_button 12    // CdSセルを接続したピン

#define LED 0   // ずっと点いているLED
//                      E,D,G,C,B,A,F
boolean table[10][7]={ {0,0,1,0,0,0,0},  // 0
                       {1,1,1,0,0,1,1},  // 1
                       {0,0,0,1,0,0,1},  // 2
                       {1,0,0,0,0,0,1},  // 3 
                       {1,1,0,0,0,1,0},  // 4
                       {1,0,0,0,1,0,0},  // 5
                       {0,0,0,0,1,0,0},  // 6
                       {1,1,1,0,0,0,1},  // 7
                       {0,0,0,0,0,0,0},  // 8
                       {1,0,0,0,0,0,0}  };// 9

int b_val = 0;            // タクトスイッチの状態を格納
int b_old_val = 0;        // b_valの前の値を保存
int s_val = 0;            // CdSセルの状態を格納
int s_old_val = 0;         // s_valの前の値を保存

// 時間表示のための変数
int sec = 0;
int msec = 0;
int nsec = 0;

unsigned long startTime = 0;  // ストップウォッチが開始した時間
unsigned long stopTime = 0;   // ストップウォッチが停止した時間

void setup() {
  pinMode(BEGIN_button, INPUT);  // タクトスイッチ、CdSセルは
  pinMode(STOP_button, INPUT);   // ともに入力に設定
  // LEDの全てのピンを出力に
  pinMode(LED, OUTPUT);
  for(int i=1; i<=7; i++){
    pinMode(i, OUTPUT);
  }
}

void loop() {
  b_val = digitalRead(BEGIN_button);  // タクトスイッチの値を保存
  s_val = digitalRead(STOP_button);   // CdSセルの値を保存
  
  // 変化を確認する
  if *1 {
    b_old_val == b_val;    // 一度オンになると
                           // リセットされるまで
                           // プログラムは終わらない
    startTime = millis();  // これが開始時間
                           // 上のような条件でのみ、最初の値を格納する
    delay(10);             // タクトスイッチのバウンシングを防止
  }
  
  // ストップ操作
  if *2 {
    stopTime = startTime - millis();  // 最終的にこれが求める値
                                      // バウンシングは起こりえないので
                                      // 今回は気にしない
  }
  
  s_old_val = s_val;     // 古くなった値を格納
  
  // 秒(sec)、10分の1秒(msec)、100分の1秒(nsec)に分ける
  if (stopTime >= 1000) {
    sec = stopTime / 1000;
    stopTime = stopTime - 1000 * sec;
    msec = stopTime / 100;
    stopTime = stopTime - 100 * msec;
    nsec = stopTime / 10;
    
  } else {
    msec = stopTime / 100;
    stopTime = stopTime - 100 * msec;
    nsec = stopTime / 10;
  }
  
  // ここに、stopTimeを表示させるコードを入れる
  for(int j=0; j<=6; j++){
    digitalWrite(LED, LOW);
    digitalWrite(j+1, table[sec][j]);
  }
  for(int j=0; j<=6; j++){
    digitalWrite(LED, LOW);
    digitalWrite(j+1, table[msec][j]);
  }
  for(int j=0; j<=6; j++){
    digitalWrite(LED, LOW);
    digitalWrite(j+1, table[nsec][j]);
  }
  delay(1000);
}



// 不明な点及び修正点などがありましたら、
// http://grousefuji.blogspot.com/
// Grouseまでお問い合わせ下さい。
// ※これは正常に動くことが確認できていません。(試験体:Japanino)※

// 参考:http://kousaku-kousaku.blogspot.com/

// Copyright (C) 2010 Grouse. All right reserved.
そして回路図・・・


アドバイス等ご協力をお願いいたしますm(_ _)m

*1:b_val == HIGH) && (b_old_val == LOW) && (s_val == LOW

*2:b_old_val == HIGH) && (s_val == HIGH) && (s_old_val == 0