Welcome to touyou note!!

こんにちは。touyouです。touyou noteは、creativeな人間を志すちっぽけな学生が様々なことに体当たりするブログです。
どうぞお楽しみ下さい。

Twitter: @touyoubuntu
HomePage: TOUYOUBUNTU

検索用ワード

PC Linux Windows Cygwin Android Python Java C/C++ C# HTML Processing Lisp Perl Arduino Japanino Unity Google TopCorder Codeforces Vim Emacs Github PSP Gundam Soccer Mobile Dialy Study Music ...

2010年7月29日木曜日

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 ((b_val == HIGH) && (b_old_val == LOW) && (s_val == LOW)) {
    b_old_val == b_val;    // 一度オンになると
                           // リセットされるまで
                           // プログラムは終わらない
    startTime = millis();  // これが開始時間
                           // 上のような条件でのみ、最初の値を格納する
    delay(10);             // タクトスイッチのバウンシングを防止
  }
  
  // ストップ操作
  if ((b_old_val == HIGH) && (s_val == HIGH) && (s_old_val == 0)) {
    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

0 件のコメント:

コメントを投稿