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年8月6日金曜日

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

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

0 件のコメント:

コメントを投稿