(Für diejenigen, die nicht wissen, Simon Spiel ist folgende:
http://www.YouTube.com/watch?v=4YhVyt4q5HI)
Materialien / Werkzeuge sind ziemlich geradlinig...
Früher habe ich ein Laser-Cutter, aber Sie können es manuell tun
Sperrholz
Acryl
Arduino UNO
8 Piezo-Sensoren
8 LEDS
Temporärer Code implementiert wurde, fehlt der Ton, aber das wird bald kommen
Kurzes Video, Tag und Nacht
http://www.YouTube.com/watch?v=ZcibT5wFgy4&feature=youtu.be
Hinweis: Wenn Sie bequem mit Codierung und Herumspielen mit verschiedenen Widerstand fühlen, würde ich Avise um dies in einem größeren Maßstab zu machen!
Gutes Beispiel: von
[Code]
const Int ButtonSensor = A5;
Int led1 = 5; LED-pins
Int led2 = 4;
Int led3 = 3;
Int led4 = 2;
Int drehen = 0;
Int InputRead = 0;
/ * Int input2 = LOW;
Int Eingang3 = LOW;
Int Eingang4 = LOW; * /
Int RandomArray [50]; Absichtlich lange zum Speichern von bis zu 100 Eingänge (zweifelhaft jeder bekommen dies weit)
Int InputArray [50];
void setup() {}
Serial.Begin(9600);
PinMode (led1, OUTPUT);
PinMode (led2, OUTPUT);
PinMode (led3, OUTPUT);
PinMode (led4, OUTPUT);
randomSeed(analogRead(0)); Um "mehr Zufälligkeit" generieren hinzugefügt mit RandomArray für die Ausgabe-Funktion
für (Int y = 0; y < = 99; y ++) {//For Aussage Schleife durch die Output und input-Funktionen
Output();
Input();
}
}
void loop() {//Unused void loop(), obwohl es aus irgendeinem Grund ohne diese /shrug kompiliert werden nicht
}
void output() {//function zur Erzeugung von Arrays durch den Spieler angepasst werden
für (Int y = drehen; y < = drehen; y ++) {//Limited durch die Wende-Variable
Serial.println(""); Einige seriellen Ausgang zu folgen
Serial.Print ("drehen:");
Serial.Print(y);
Serial.println("");
RandomArray [y] = random (1, 5); RandomArray [y] eine Zufallszahl (1-4) zuordnen, zählen y wird die Wende
für (Int X = 0; X < = drehen; x++) {}
Serial.Print(randomArray[x]);
Wenn (RandomArray [X]
== 1) {//if Aussagen zur Anzeige der gespeicherten Werte im Array
DigitalWrite (led1, HIGH);
Delay(500);
DigitalWrite (led1, LOW);
Delay(100);
}
Wenn (RandomArray [X]
== 2) {
DigitalWrite (led2, HIGH);
Delay(500);
DigitalWrite (led2, LOW);
Delay(100);
}
Wenn (RandomArray [X]
== 3) {
DigitalWrite (led3, HIGH);
Delay(500);
DigitalWrite (led3, LOW);
Delay(100);
}
Wenn (RandomArray [X]
== 4) {
DigitalWrite (led4, HIGH);
Delay(500);
DigitalWrite (led4, LOW);
Delay(100);
}
}
}
}
void Input()-Methode {//Function so dass Benutzereingaben und Kontrolle Eingang gegen das erzeugte array
für (Int X = 0; X < = drehen ;){//Statement gesteuert durch Umdrehung Graf
/ * input1 = digitalRead(switch1);
INPUT2 = digitalRead(switch2);
Eingang3 = digitalRead(switch3);
Eingang4 = digitalRead(switch4); * /
InputRead = analogRead(buttonSensor);
Serial.println(inputRead);
Delay(100);
Wenn (InputRead > 685) {//Checking für Tastendruck
DigitalWrite (led1, HIGH);
playTone(1915, 200); //Passes Tonwertzunahmen und Dauer des Tons der PlayTone-Funktion
Delay(200);
DigitalWrite (led1, LOW);
InputArray [X] = 1;
Delay(50);
Serial.Print("");
Serial.Print(1);
Wenn (InputArray [X]! = randomArray[x]) {//Checks Werteingabe von Benutzer und prüft diese gegen
Fail(); der Wert an der gleichen Stelle auf dem erzeugten array
} //The Fail-Funktion wird aufgerufen, wenn sie nicht übereinstimmen
x++;
}
Wenn ((inputRead > 600) & & (InputRead < 680)) {}
DigitalWrite (led2, HIGH);
Delay(200);
DigitalWrite (led2, LOW);
InputArray [X]
= 2;
Delay(50);
Serial.Print("");
Serial.Print(2);
Wenn (InputArray [X]
! = RandomArray [X]
) {
Fail();
}
x++;
}
Wenn ((inputRead > 535) & & (InputRead < 590)) {}
DigitalWrite (led3, HIGH);
Delay(200);
DigitalWrite (led3, LOW);
InputArray [X]
= 3;
Delay(50);
Serial.Print("");
Serial.Print(3);
Wenn (InputArray [X]
! = RandomArray [X]
) {
Fail();
}
x++;
}
Wenn ((inputRead > 400) & & (InputRead < 525)) {}
DigitalWrite (led4, HIGH);
Delay(200);
DigitalWrite (led4, LOW);
InputArray [X]
= 4;
Delay(50);
Serial.Print("");
Serial.Print(4);
Wenn (InputArray [X]
! = RandomArray [X]
) {
Fail();
Serial.Print("failed");
}
x++;
}
}
Delay(500);
Umdrehung ++; Erhöht die Anzahl der Jahrhundertwende, auch die letzte Aktion vor dem Start der Ausgangsfunktion immer wieder
}
void fail() {//Function verwendet, wenn der Spieler nicht die Reihenfolge überein
für (Int y = 0; y < = 5; y ++) {//Flashes Leuchten für den Ausfall
DigitalWrite (led1, HIGH);
DigitalWrite (led2, HIGH);
DigitalWrite (led3, HIGH);
DigitalWrite (led4, HIGH);
Delay(200);
DigitalWrite (led1, LOW);
DigitalWrite (led2, LOW);
DigitalWrite (led3, LOW);
DigitalWrite (led4, LOW);
Delay(200);
}
Delay(500);
Drehen =-1; So das Spiel über ohne Notwendigkeit für einen Reset-Knopf beginnt drehen setzt Wert
} [/ code]