(Voor degenen die niet weten, simon spel is het volgende:
http://www.YouTube.com/watch?v=4YhVyt4q5HI)
Materialen / gereedschappen zijn vrij ongecompliceerd...
Ik gebruikte een laser cutter, maar u kunt dit handmatig doen
Multiplex
Acryl
Arduino UNO
8 Piezo sensoren
8 LEDS
Tijdelijke code heeft gelegd, het ontbreken van geluid maar dat komt snel genoeg
Snelle video, dag en nacht
http://www.YouTube.com/watch?v=ZcibT5wFgy4&feature=Youtu.be
Opmerking: Tenzij je comfortabel voelt met codering en spelen rond met verschillende weerstand, zou ik avise zodat deze in een grotere schaal!
Goed voorbeeld: door
[code]
Const int buttonSensor = A5;
int led1 = 5; LED pinnen
int led2 = 4;
int led3 = 3;
int led4 = 2;
int draaien = 0;
int inputRead = 0;
/ * int Ingang2 = laag;
int input3 = laag;
int input4 = laag; * /
int randomArray [50]; Opzettelijk lang voor het opslaan van maximaal 100 ingangen (twijfelachtig iedereen krijgt dit ver)
int inputArray [50];
VOID Setup {}
Serial.begin(9600);
pinMode (led1, OUTPUT);
pinMode (led2, OUTPUT);
pinMode (led3, OUTPUT);
pinMode (led4, OUTPUT);
randomSeed(analogRead(0)); Met de randomArray voor de uitgangsfunctie voor het genereren van "meer willekeur" toegevoegd
voor (int y = 0; y < = 99; y ++) {//For verklaring lus via de output en input functies
output();
input();
}
}
void loop {//Unused void loop, maar om wat voor reden niet het compileren zonder deze /shrug
}
VOID output() {//function voor het genereren van de array worden geëvenaard door de speler
voor (int y = beurt; y < = beurt; y ++) {//Limited door de draai-variabele
Serial.println(""); Sommige uitgang voor seriële volgen
Serial.Print ("draaien:");
Serial.Print(y);
Serial.println("");
randomArray [y] = willekeurige (1, 5); Een willekeurig getal (1-4) toe te wijzen aan de randomArray [y], tellen y wordt de beurt
voor (int x = 0; x < = beurt; x ++) {}
Serial.Print(randomArray[x]);
Als (randomArray [x]
== 1) {//if verklaringen om weer te geven van de opgeslagen waarden in de matrix
digitalWrite (led1, hoge);
delay(500);
digitalWrite (led1, laag);
delay(100);
}
Als (randomArray [x]
== 2) {
digitalWrite (led2, hoge);
delay(500);
digitalWrite (led2, laag);
delay(100);
}
Als (randomArray [x]
== 3) {
digitalWrite (led3, hoge);
delay(500);
digitalWrite (led3, laag);
delay(100);
}
Als (randomArray [x]
== 4) {
digitalWrite (led4, hoge);
delay(500);
digitalWrite (led4, laag);
delay(100);
}
}
}
}
VOID input() {//Function voor het toestaan van gebruikersinvoer en controleren van de invoer tegen de gegenereerde matrix
voor (int x = 0; x < = beurt ;){//Statement beheerd door beurt tellen
/ * Ingang1 = digitalRead(switch1);
Ingang2 = digitalRead(switch2);
input3 = digitalRead(switch3);
input4 = digitalRead(switch4); * /
inputRead = analogRead(buttonSensor);
Serial.println(inputRead);
delay(100);
Als (inputRead > 685) {//Checking voor knop duwen
digitalWrite (led1, hoge);
playTone(1915, 200); //Passes Toon waarde en de duur van de Toon naar de playTone-functie
delay(200);
digitalWrite (led1, laag);
inputArray [x] = 1;
delay(50);
Serial.Print("");
Serial.Print(1);
Als (inputArray [x]! = randomArray[x]) {//Checks waarde input door gebruiker en controleert het tegen
Fail(); de waarde op dezelfde plek op de gegenereerde array
} //The fail functie wordt aangeroepen als het niet overeenkomt met
x ++;
}
Als ((inputRead > 600) & & (inputRead < 680)) {}
digitalWrite (led2, hoge);
delay(200);
digitalWrite (led2, laag);
inputArray [x]
= 2;
delay(50);
Serial.Print("");
Serial.Print(2);
Als (inputArray [x]
! = randomArray [x]
) {
Fail();
}
x ++;
}
Als ((inputRead > 535) & & (inputRead < 590)) {}
digitalWrite (led3, hoge);
delay(200);
digitalWrite (led3, laag);
inputArray [x]
= 3;
delay(50);
Serial.Print("");
Serial.Print(3);
Als (inputArray [x]
! = randomArray [x]
) {
Fail();
}
x ++;
}
Als ((inputRead > 400) & & (inputRead < 525)) {}
digitalWrite (led4, hoge);
delay(200);
digitalWrite (led4, laag);
inputArray [x]
= 4;
delay(50);
Serial.Print("");
Serial.Print(4);
Als (inputArray [x]
! = randomArray [x]
) {
Fail();
Serial.Print("Failed");
}
x ++;
}
}
delay(500);
beurt ++; Verhoogt de beurt tellen, ook de laatste handeling voordat de uitgangsfunctie opnieuw
}
VOID fail() {//Function gebruikt als de speler niet overeenkomt met de reeks opdrachten
voor (int y = 0; y < = 5; y ++) {//Flashes verlichting voor mislukking
digitalWrite (led1, hoge);
digitalWrite (led2, hoge);
digitalWrite (led3, hoge);
digitalWrite (led4, hoge);
delay(200);
digitalWrite (led1, laag);
digitalWrite (led2, laag);
digitalWrite (led3, laag);
digitalWrite (led4, laag);
delay(200);
}
delay(500);
Draai = -1; Hiermee herstelt u terecht waarde het spel opnieuw gestart zonder noodzaak van een reset-knop
} [/ code]