wiki:baseball_game_kit

Version 2 (modified by Shinichi Ohki, 10 years ago) ( diff )

--

Arduinoで作る野球ゲームの部品セット 紹介ページ

トラ技ジュニア 12・1月号の記事「ひとりでできるマイコンArduino ~電子回路のプログラムもコピペッペ~」で紹介されている「LED野球ゲーム」にピッタリのキットです。

キット内容物

  • Arduino Uno
  • ブレッドボード
  • 柔らかいジャンパ 4本
  • LED5個(赤4個、緑1個)
  • 抵抗1kΩ 1個
  • タクトスイッチ 1個
  • 圧電スピーカ 1個
  • USBケーブル

野球ゲーム スケッチ

[baseball.zip 野球ゲーム スケッチ]
ダウンロードしたbaseball.zipファイルを展開して、出てきた「baseball」フォルダをスケッチブックの保存場所フォルダにコピーしてArduino IDEから開いてください。
スケッチブックの保存場所は、Arduino IDEの[ファイル]-[環境設定](Windowsの場合)[Arduino]-[環境設定](Macの場合)でわかります。

#define BUTTON   2
#define SPEAKER  3
#define BALL5    9
#define BALL4    10
#define BALL3    11
#define BALL2    12
#define BALL1    13
#define DURATION 500000

unsigned long duration = DURATION;
int level = 0;
int strike = 0;
int last = 0;

void setup() {
  pinMode(BALL1, INPUT);
  pinMode(BALL2, INPUT);
  pinMode(BALL3, INPUT);
  pinMode(BALL4, INPUT);
  pinMode(BALL5, INPUT);
  pinMode(SPEAKER, OUTPUT);
  pinMode(BUTTON, INPUT_PULLUP);
  Serial.begin(9600);
}

boolean ball(int pin) {
  tone(SPEAKER, 880, 20);
  pinMode(pin, OUTPUT);
  digitalWrite(pin, HIGH);
  last = pin;
  unsigned long start = micros();
  while (micros() - start < duration) {
    if (digitalRead(BUTTON) == LOW) {
      return true;
    }
  }
  digitalWrite(pin, LOW);
  pinMode(pin, INPUT);
  return false;
}

void loop() {
  Serial.print("Level: ");
  Serial.println(level);
  Serial.print("Strike: ");
  Serial.println(strike);
  Serial.println("Hit the button to start");

  // ボタンが押されてから離されるのを待つ。
  while (digitalRead(BUTTON) == HIGH) {
  }
  while (digitalRead(BUTTON) == LOW) {
  }
  delay(50);

  // ボールを投げる。
  if (ball(BALL1) || ball(BALL2) || ball(BALL3) || ball(BALL4)) {
    // ボタンを押したのが早すぎる。
    ++strike;
    tone(SPEAKER, 50, 500);
    delay(700);
  } else
  if (ball(BALL5)) {
    // ヒット!
    strike = 0;                 // ストライクの数を0に戻す。
    ++level;                    // レベルを上げる。
    duration *= 0.8;            // ボールを速くする。
    tone(SPEAKER, 554, 300);
    delay(300);
    tone(SPEAKER, 440, 300);
    delay(300);
  } else {
    // 遅すぎる。
    ++strike;
    tone(SPEAKER, 50, 500);
    delay(700);
  }

  // ボタンがオフになるまで待つ。
  while (digitalRead(BUTTON) == LOW) {
  }
  Serial.println();
  digitalWrite(last, LOW);      // 最後に光らせたLEDを消す。
  pinMode(last, INPUT);

  if (strike == 3) {
    // 3ストライク、バッターアウト。
    Serial.print("Last Level: ");
    Serial.println(level);
    Serial.println("Hit the button to start over.");
    tone(SPEAKER, 50, 500);
    delay(700);
    tone(SPEAKER, 50, 500);

    // ボタンが押されてから離されるのを待つ。
    while (digitalRead(BUTTON) == HIGH) {
    }
    while (digitalRead(BUTTON) == LOW) {
    }
    duration = DURATION;
    level = strike = last = 0;
  }
}

Attachments (2)

Download all attachments as: .zip

Note: See TracWiki for help on using the wiki.