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 Simon Says

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


//Titel
/*
 * Simon Says
 * Konzentrationsspiel für eine Person
 * 
 * Zusammengehörigkeit von LED und Taster:
 * LED Pin 8 mit Taster Pin 2
 * LED Pin 9 mit Taster Pin 3
 * LED Pin 10 mit Taster Pin 4
 * LED Pin 11 mit Taster Pin 5
 * 
 * 
 * Originaly made by Robert Spann
 * Code trimmed and sound effects added by digimike
 * http://www.instructables.com/id/Arduino-Simon-Says/?&sort=ACTIVE&limit=40&offset=40#DISCUSS
 */


//Biblothek einbinden
/*
 * Die Töne werden über die Tone-Library defniert
 * Download der Tone-Library:
 * https://github.com/bhagman/Tone
 */
#include <Tone.h>

//Definitionsbereich
/*
 * LED, Taster und Töne in einem "Array" definieren
 * Alle Töne und Zeiten können abgeändert werden
 * starttune = Startmelodie 
 * duration2 = Tonlänge
 * note = Tonabfolge überall wo "note" definiert wird
 */
int starttune[] = {NOTE_C4, NOTE_F4, NOTE_C4, NOTE_F4, NOTE_C4, NOTE_F4, NOTE_C4, NOTE_F4, NOTE_G4, NOTE_F4, NOTE_E4, NOTE_F4, NOTE_G4};
int duration2[] = {100, 200, 100, 200, 100, 400, 100, 100, 100, 100, 200, 100, 500};
int note[] = {NOTE_C4, NOTE_C4, NOTE_G4, NOTE_C5, NOTE_G4, NOTE_C5};
int duration[] = {100, 100, 100, 300, 100, 300};
int taster[] = {5, 4, 3, 2}; 
int LED[] = {8, 9, 10, 11};
int turn = 0;  // Zähler einschalten
int tasterstatus = 0;  // Tasterstatus abfragen
int randomArray[100]; //Bis 100 Spielabfolgen möglich
int inputArray[100]; 

Tone speaker;

void setup() {
  Serial.begin(9600);
  speaker.begin(12); //Speaker auf Pin 12 festlegen

  for(int x=0; x<4; x++) { //LEDs als Output definieren
    pinMode(LED[x], OUTPUT);
  }
 
  for(int x=0; x<4; x++) {
    pinMode(taster[x], INPUT);  //Taster als Inputs definieren
    digitalWrite(taster[x], HIGH);  //Taster startet in "hoher" Position
  }

  randomSeed(analogRead(0)); //Zufälligkeit erhöhen
  for (int thisNote = 0; thisNote < 13; thisNote ++) {
     speaker.play(starttune[thisNote]);
     if (thisNote==0 || thisNote==2 || thisNote==4 || thisNote== 6) {
       digitalWrite(LED[0], HIGH);
     }
     if (thisNote==1 || thisNote==3 || thisNote==5 || thisNote== 7 || thisNote==9 || thisNote==11) {
       digitalWrite(LED[1], HIGH);
     }
     if (thisNote==8 || thisNote==12) {
       digitalWrite(LED[2], HIGH);
     } 
     if (thisNote==10) {  
       digitalWrite(LED[3], HIGH);
     }
     delay(duration2[thisNote]);
     //Pause vor nächster Runde
     speaker.stop();
     digitalWrite(LED[0], LOW);
     digitalWrite(LED[1], LOW);
     digitalWrite(LED[2], LOW);
     digitalWrite(LED[3], LOW);
     delay(25);
    }
  delay(1000);
}

void loop() {  
  for (int y=0; y<=99; y++) {
    digitalWrite(LED[0], HIGH);
    digitalWrite(LED[1], HIGH);
    digitalWrite(LED[2], HIGH);
    digitalWrite(LED[3], HIGH);
 
    for (int thisNote = 0; thisNote < 6; thisNote ++) {
     speaker.play(note[thisNote]);
     delay(duration[thisNote]);
     speaker.stop();
     delay(25);
    }
   
    digitalWrite(LED[0], LOW);
    digitalWrite(LED[1], LOW);
    digitalWrite(LED[2], LOW);
    digitalWrite(LED[3], LOW);
    delay(1000);
 
    for (int y=turn; y <= turn; y++) {
      Serial.println(""); 
      Serial.print("Turn: ");
      Serial.print(y);
      Serial.println("");
      randomArray[y] = random(1, 5); 
      for (int x=0; x <= turn; x++) {
        Serial.print(randomArray[x]);
     
        for(int y=0; y<4; y++) {
     
          if (randomArray[x] == 1 && LED[y] == 8) {  
            digitalWrite(LED[y], HIGH);
            speaker.play(NOTE_G3, 100);
            delay(400);
            digitalWrite(LED[y], LOW);
            delay(100);
          }

          if (randomArray[x] == 2 && LED[y] == 9) {
            digitalWrite(LED[y], HIGH);
            speaker.play(NOTE_A3, 100);
            delay(400);
            digitalWrite(LED[y], LOW);
            delay(100);
          }
 
          if (randomArray[x] == 3 && LED[y] == 10) {
            digitalWrite(LED[y], HIGH);
            speaker.play(NOTE_B3, 100);
            delay(400);
            digitalWrite(LED[y], LOW);
            delay(100);
          }

          if (randomArray[x] == 4 && LED[y] == 11) {
            digitalWrite(LED[y], HIGH);
            speaker.play(NOTE_C4, 100);
            delay(400);
            digitalWrite(LED[y], LOW);
            delay(100);
          }
        }
      }
    }
    input();
  }
}



void input() {
  for (int x=0; x <= turn;) {

    for(int y=0; y<4; y++) {
     
      tasterstatus = digitalRead(taster[y]);
   
      if (tasterstatus == LOW && taster[y] == 2) { 
        digitalWrite(LED[0], HIGH);
        speaker.play(NOTE_G3, 100);
        delay(200);
        digitalWrite(LED[0], LOW);
        inputArray[x] = 1;
        delay(250);
        Serial.print(" ");
        Serial.print(1);
 //Kontrollieren ob richtig gedrückt, ansonsten "fail"
        if (inputArray[x] != randomArray[x]) { 
          fail();                           
        }                
        x++;
      }
       if (tasterstatus == LOW && taster[y] == 3) {
        digitalWrite(LED[1], HIGH);
        speaker.play(NOTE_A3, 100);
        delay(200);
        digitalWrite(LED[1], LOW);
        inputArray[x] = 2;
        delay(250);
        Serial.print(" ");
        Serial.print(2);
        if (inputArray[x] != randomArray[x]) {
          fail();
        }
        x++;
      }

      if (tasterstatus == LOW && taster[y] == 4) {
        digitalWrite(LED[2], HIGH);
        speaker.play(NOTE_B3, 100);
        delay(200);
        digitalWrite(LED[2], LOW);
        inputArray[x] = 3;
        delay(250);
        Serial.print(" ");
        Serial.print(3);
        if (inputArray[x] != randomArray[x]) {
          fail();
        }
        x++;
      }

      if (tasterstatus == LOW && taster[y] == 5) {
        digitalWrite(LED[3], HIGH);
        speaker.play(NOTE_C4, 100);
        delay(200);
        digitalWrite(LED[3], LOW);
        inputArray[x] = 4;
        delay(250);
        Serial.print(" ");
        Serial.print(4);
        if (inputArray[x] != randomArray[x]) {
          fail();
        }
        x++;
      }
    }
  }
  delay(500);
  turn++; //Wechsel in nächstes Level
}

//Was passiert bei einem Fehler? Alle LED leuchten
void fail() { 
  for (int y=0; y<=2; y++)
  { 
    digitalWrite(LED[0], HIGH);
    digitalWrite(LED[1], HIGH);
    digitalWrite(LED[2], HIGH);
    digitalWrite(LED[3], HIGH);
    speaker.play(NOTE_G3, 300);
    delay(200);
    digitalWrite(LED[0], LOW);
    digitalWrite(LED[1], LOW);
    digitalWrite(LED[2], LOW);
    digitalWrite(LED[3], LOW);
    speaker.play(NOTE_C3, 300);
    delay(200);
  }
  delay(500);
  turn = -1; //Resets turn value so the game starts over without need for a reset button
}
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