Changes between Initial Version and Version 1 of baseball_game_kit


Ignore:
Timestamp:
Dec 3, 2013 3:24:19 PM (10 years ago)
Author:
Shinichi Ohki
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • baseball_game_kit

    v1 v1  
     1= Arduinoで作る野球ゲームの部品セット 紹介ページ =
     2
     3[http://toragi.cqpub.co.jp/Portals/0/support/junior/ トラ技ジュニア] 12・1月号の記事「ひとりでできるマイコンArduino ~電子回路のプログラムもコピペッペ~」で紹介されている「LED野球ゲーム」にピッタリのキットです。
     4
     5== キット内容物 ==
     6 * Arduino Uno
     7 * ブレッドボード
     8 * 柔らかいジャンパ 4本
     9 * LED5個(赤4個、緑1個)
     10 * 抵抗1kΩ          1個
     11 * タクトスイッチ    1個
     12 * 圧電スピーカ      1個
     13 * USBケーブル
     14
     15== 野球ゲーム スケッチ ==
     16
     17{{{
     18#define BUTTON   2
     19#define SPEAKER  3
     20#define BALL5    9
     21#define BALL4    10
     22#define BALL3    11
     23#define BALL2    12
     24#define BALL1    13
     25#define DURATION 500000
     26
     27unsigned long duration = DURATION;
     28int level = 0;
     29int strike = 0;
     30int last = 0;
     31
     32void setup() {
     33  pinMode(BALL1, INPUT);
     34  pinMode(BALL2, INPUT);
     35  pinMode(BALL3, INPUT);
     36  pinMode(BALL4, INPUT);
     37  pinMode(BALL5, INPUT);
     38  pinMode(SPEAKER, OUTPUT);
     39  pinMode(BUTTON, INPUT_PULLUP);
     40  Serial.begin(9600);
     41}
     42
     43boolean ball(int pin) {
     44  tone(SPEAKER, 880, 20);
     45  pinMode(pin, OUTPUT);
     46  digitalWrite(pin, HIGH);
     47  last = pin;
     48  unsigned long start = micros();
     49  while (micros() - start < duration) {
     50    if (digitalRead(BUTTON) == LOW) {
     51      return true;
     52    }
     53  }
     54  digitalWrite(pin, LOW);
     55  pinMode(pin, INPUT);
     56  return false;
     57}
     58
     59void loop() {
     60  Serial.print("Level: ");
     61  Serial.println(level);
     62  Serial.print("Strike: ");
     63  Serial.println(strike);
     64  Serial.println("Hit the button to start");
     65
     66  // ボタンが押されてから離されるのを待つ。
     67  while (digitalRead(BUTTON) == HIGH) {
     68  }
     69  while (digitalRead(BUTTON) == LOW) {
     70  }
     71  delay(50);
     72
     73  // ボールを投げる。
     74  if (ball(BALL1) || ball(BALL2) || ball(BALL3) || ball(BALL4)) {
     75    // ボタンを押したのが早すぎる。
     76    ++strike;
     77    tone(SPEAKER, 50, 500);
     78    delay(700);
     79  } else
     80  if (ball(BALL5)) {
     81    // ヒット!
     82    strike = 0;                 // ストライクの数を0に戻す。
     83    ++level;                    // レベルを上げる。
     84    duration *= 0.8;            // ボールを速くする。
     85    tone(SPEAKER, 554, 300);
     86    delay(300);
     87    tone(SPEAKER, 440, 300);
     88    delay(300);
     89  } else {
     90    // 遅すぎる。
     91    ++strike;
     92    tone(SPEAKER, 50, 500);
     93    delay(700);
     94  }
     95
     96  // ボタンがオフになるまで待つ。
     97  while (digitalRead(BUTTON) == LOW) {
     98  }
     99  Serial.println();
     100  digitalWrite(last, LOW);      // 最後に光らせたLEDを消す。
     101  pinMode(last, INPUT);
     102
     103  if (strike == 3) {
     104    // 3ストライク、バッターアウト。
     105    Serial.print("Last Level: ");
     106    Serial.println(level);
     107    Serial.println("Hit the button to start over.");
     108    tone(SPEAKER, 50, 500);
     109    delay(700);
     110    tone(SPEAKER, 50, 500);
     111
     112    // ボタンが押されてから離されるのを待つ。
     113    while (digitalRead(BUTTON) == HIGH) {
     114    }
     115    while (digitalRead(BUTTON) == LOW) {
     116    }
     117    duration = DURATION;
     118    level = strike = last = 0;
     119  }
     120}
     121
     122}}}