夢追い人

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

FallTime ver.0.02

バージョン上げときながら、自分でもまだちゃんと動かせたこと無いのね(笑)

とりあえず新しいコード載せとくよ(桐っ


// Falling's Timer ver.0.02 : 二個のセンサーを用意する
// ひとつはタクトスイッチ、もうひとつは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;            // タクトスイッチの状態を格納
int b_old_val;        // b_valの前の値を保存
int s_val;            // CdSセルの状態を格納
int s_old_val;        // s_valの前の値を保存
int starting;         // ストップウォッチが動いているかどうか?

// 時間表示のための変数
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);
  }
  digitalWrite(BEGIN_button, HIGH);  // プルアップさせる。
  digitalWrite(STOP_button, HIGH);
}

void loop() {
  b_val = digitalRead(BEGIN_button);  // タクトスイッチの値を保存
  s_val = digitalRead(STOP_button);   // CdSセルの値を保存
  
  // 変化を確認する
  if (b_val == LOW && b_old_val == HIGH && starting == false) {
    startTime = millis();  // これが開始時間
                           // 上のような条件でのみ、最初の値を格納する
    starting = true;
    delay(10);             // タクトスイッチのバウンシングを防止
    b_old_val == b_val;    // 一度オンになると
                           // リセットされるまで
                           // プログラムは終わらない
  }
  
  // ストップ操作
  else if (s_val == LOW && s_old_val == HIGH && starting ==true) {
    stopTime = millis() - startTime;  // 最終的にこれが求める値
                                      // バウンシングは起こりえないので
                                      // 今回は気にしない
    starting = false;
    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);
  }
  
  // 状態を保存
  else {
    b_old_val = b_val;
    s_old_val = s_val;
  }
}



// 不明な点及び修正点などがありましたら、
// http://grousefuji.blogspot.com/
// Grouseまでお問い合わせ下さい。
// ※これは正常に動くことが確認できていません。(試験体:Japanino)※
// ※LEDは自分の接続方法に従い、各自置き換えてやってください。※

// 追記CdSセルをタクトスイッチに変えて実験
// 詳細後日、ブログで公開予定。

// 参考:http://kousaku-kousaku.blogspot.com/2008/05/arduino-led.html
//       http://www.arduino.cc/playground/Code/Stopwatch

// Copyright (C) 2010 Grouse. All right reserved.
ぐぐっても中々自分と同じようなこと考えてる人いないしなwww

ちょっと、自分乙wwwって感じです。
このまま分からんようだったら、多分自由研究の予定を大幅に変更するかも・・・



p.s. モバゲーで気づいたんだけど、まいけるさんこのブログ見てたのねwww

イでよ、まいける!!!!