= Arduinoで作る野球ゲームの部品セット 紹介ページ = [http://toragi.cqpub.co.jp/Portals/0/support/junior/ トラ技ジュニア] 12・1月号の記事「ひとりでできるマイコンArduino ~電子回路のプログラムもコピペッペ~」で紹介されている「LED野球ゲーム」にピッタリのキットです。 == キット内容物 == * Arduino Uno * ブレッドボード * 柔らかいジャンパ 1袋(10本入り) * LED5個(赤4個、緑1個) * 抵抗1kΩ 1個 * タクトスイッチ 1個 * 圧電スピーカ 1個 * USBケーブル == 野球ゲーム スケッチ == [baseball.zip 野球ゲーム スケッチ][[br]] ダウンロードしたbaseball.zipファイルを展開して、出てきた「baseball」フォルダをスケッチブックの保存場所フォルダにコピーしてArduino IDEから開いてください。[[br]] スケッチブックの保存場所は、Arduino IDEの[ファイル]-[環境設定](Windowsの場合)[Arduino]-[環境設定](Macの場合)でわかります。[[br]] {{{ #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; } } }}}