Sketch von ReadySteadyBaam
Der Sketch kann heruntergeladen oder hier apkopiert und in eine leere IDE eingefügt werden.

readysteadybaam_spiel.ino |
//Titel
/*
* Ready Steady Baam
* Reaktionsspiel für zwei Personen
* Wer drückt schneller, wenn LED3 (grüne LED) leuchtet?
*
* Speaker GND und 12
* Player1 (Taster 1) = 2
* Player2 (Taster 2) = 3
* LED1 = 5
* LED2 = 6
* LED3 = 7
*
* Sketch von
* Mich Heimann, Karin Hodel 2015
*/
//Biblothek einbinden
/*
* Die Töne werden über die Tone-Library defniert
* Download der Tone-Library:
* https://github.com/bhagman/Tone
*/
#include <Tone.h>
//Definitionsbereich
int Player1 = 2;
int Player2 = 3;
int LED1 = 5;
int LED2 = 6;
int LED3 = 7;
long bamTime;
long p1Time;
long p2Time;
Tone speaker;
//Setup: Funktion der Bauteile festlegen
void setup() {
// put your setup code here, to run once:
Serial.begin (9600);
Serial.println ("setup");
speaker.begin (12);
pinMode (LED1, OUTPUT);
pinMode (LED2, OUTPUT);
pinMode (LED3, OUTPUT);
setupPlayers();
/*
* Spielbeginn:
* LEDs leuchten nacheinander auf, Melodie spielt danach
*/
digitalWrite (LED1, HIGH);
delay (500);
digitalWrite (LED1, HIGH);
digitalWrite (LED2, HIGH);
delay (500);
digitalWrite (LED2, HIGH);
digitalWrite (LED3, HIGH);
delay (500);
digitalWrite (LED3, HIGH);
speaker.play (NOTE_G5, 100);
delay (250);
speaker.play (NOTE_C6, 100);
delay (250);
speaker.play (NOTE_E6, 100);
delay (300);
speaker.play (NOTE_DS6, 100);
delay (150);
speaker.play (NOTE_DS6, 100);
delay (220);
speaker.play (NOTE_DS6, 100);
delay (250);
speaker.play (NOTE_G5, 100);
delay (100);
speaker.play (NOTE_GS5, 100);
delay (450);
speaker.play (NOTE_GS6, 100);
delay (1000);
}
void setupPlayers() {
pinMode (Player1, INPUT);
digitalWrite (Player1, HIGH);
attachInterrupt (0, onPlayer1, FALLING);
pinMode (Player2, INPUT);
digitalWrite (Player2, HIGH);
attachInterrupt (1, onPlayer2, FALLING);
}
/*
* Spielablauf:
* Was passiert im Spile?
* Wird im Loop nur noch mit runGame() abgerufen
*/
void runGame() {
int bam = random( 500, 3000 ); //Zufallszeit
int d = 1000; //Definierte Zeit für Variable "d"
p1Time = 0;
p2Time = 0;
bamTime = 0;
//Alle LED ausschalten
digitalWrite (LED1, LOW);
digitalWrite (LED2, LOW);
digitalWrite (LED3, LOW);
delay (d); //Pause vor Spielbeginn
//LED1 mit Ton
speaker.play (NOTE_A3, 300);
digitalWrite (LED1, HIGH);
delay (d); //Pause zwischen LED1 und LED2
//LED2 mit Ton
speaker.play (NOTE_A3, 300);
digitalWrite (LED2, HIGH);
delay (bam); //Pause (Zufallszeit) zwischen LED2 und LED3
//LED3 mit Ton
speaker.play (NOTE_A4, 600);
digitalWrite (LED3, HIGH);
bamTime = millis();
delay (d);
long delta1 = p1Time - bamTime;
long delta2 = p2Time - bamTime;
digitalWrite (LED1, LOW);
digitalWrite (LED2, LOW);
digitalWrite (LED3, LOW);
boolean loose = true;
/*
* Definieren des Siegers
* Wer drückt zuerst, aber nicht zu früh?
*/
if (delta1 > 0 && ( delta1 < delta2 || delta2 < 0 ) ) {
digitalWrite (LED1, HIGH);
speaker.play (NOTE_G5, 100);
loose = false;
}
if (delta2 > 0 && ( delta2 < delta1 || delta1 < 0 ) ) {
digitalWrite (LED2, HIGH);
speaker.play ( NOTE_C5, 100);
loose = false;
}
if( loose ) {
speaker.play( NOTE_A2, 600 );
}
delay( d );
}
void onPlayer1() {
if( p1Time == 0 ) p1Time = millis();
}
void onPlayer2() {
if( p2Time == 0 ) p2Time = millis();
}
//Loop: Was machen die Bauteile? Ständige wiederholung
void loop() {
// put your main code here, to run repeatedly:
runGame();
}