Last active
December 25, 2015 21:49
-
-
Save sgk/7045323 to your computer and use it in GitHub Desktop.
Arduino "baseball" game
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment