making in der schule
  • die idee
  • der raum
  • plotten
    • textiles beplotten
    • folien schneiden
    • verpackungen
  • 3d-drucken
    • projekte folgen
  • lasercutten
  • arduino
    • software
    • hardware
    • schaltung
    • übungen
    • projekte
  • links
  • kontakt

Sketch von ReadySteadyBaam

Der Sketch kann heruntergeladen oder hier apkopiert und in eine leere IDE eingefügt werden.
readysteadybaam_spiel.ino
File Size: 3 kb
File Type: ino
Datei herunterladen

//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();
}
oder zu hause      
  • die idee
  • der raum
  • plotten
    • textiles beplotten
    • folien schneiden
    • verpackungen
  • 3d-drucken
    • projekte folgen
  • lasercutten
  • arduino
    • software
    • hardware
    • schaltung
    • übungen
    • projekte
  • links
  • kontakt