Simon Game - xylofon Version
(För dem som inte vet, simon spel är följande:
http://www.youtube.com/watch?v=4YhVyt4q5HI)
Material / verktyg är ganska rakt framåt...
Jag använde en laserskärare men kan du göra det manuellt
Plywood
Akryl
Arduino UNO
8 Piezo sensorer
8 LYSDIODER
Tillfälliga koden har följts, saknade ljud men det kommer nog snart
Snabb video, dag och natt
http://www.youtube.com/watch?v=ZcibT5wFgy4&feature=youtu.be
Obs: Om du känner dig bekvämt med kodning och lekte med olika motstånd, jag skulle producentorganisationerna för att göra detta i större skala!
Bra exempel: av
[code]
CONST int buttonSensor = A5;
int led1 = 5; LED stift
int led2 = 4;
int led3 = 3;
int led4 = 2;
int vända = 0;
int inputRead = 0;
/ * int input2 = låg;
int input3 = låg;
int INGÅNG4 = låg; * /
int randomArray [50]; Avsiktligt länge att lagra upp till 100 ingångar (tveksamt någon vilja få detta långt)
int inputArray [50];
void setup() {
Serial.BEGIN(9600);
pinMode (led1, produktionen);
pinMode (led2, produktionen);
pinMode (led3, produktionen);
pinMode (led4, produktionen);
randomSeed(analogRead(0)); Läggas till för att generera "mer slumpmässighet" med randomArray för funktionen output
för (int y = 0; y < = 99; y ++) {//For uttalande att loopa igenom funktionerna output och input
output();
input();
}
}
void loop() {//Unused Tom loop(), men av någon anledning det inte kompilera utan denna/axelryckning
}
void output() {//function för att skapa matrisen ska matchas av spelaren
för (int y = slå; y < = slå; y ++) {//Limited av variabeln tur
Serial.println(""); Vissa seriella produktionen att följa
Serial.Print ("vända:");
Serial.Print(y);
Serial.println("");
randomArray [y] = random (1, 5); Ge ett slumpmässigt nummer (1-4) randomArray [y], räkna y som tur
för (int x = 0; x < = slå; x ++) {
Serial.Print(randomArray[x]);
om (randomArray [x]
== 1) {//if deklarationer Visa lagrade värden i matrisen
digitalWrite (led1, hög);
Delay(500);
digitalWrite (led1, låg);
Delay(100);
}
om (randomArray [x]
== 2) {
digitalWrite (led2, hög);
Delay(500);
digitalWrite (led2, låg);
Delay(100);
}
om (randomArray [x]
== 3) {
digitalWrite (led3, hög);
Delay(500);
digitalWrite (led3, låg);
Delay(100);
}
om (randomArray [x]
== 4) {
digitalWrite (led4, hög);
Delay(500);
digitalWrite (led4, låg);
Delay(100);
}
}
}
}
void input() {//Function för att tillåta användarindata och kontrollera ingång mot genererade matrisen
för (int x = 0; x < = slå ;){//Statement kontrolleras av tur räkna
/ * input1 = digitalRead(switch1);
INPUT2 = digitalRead(switch2);
INPUT3 = digitalRead(switch3);
INGÅNG4 = digitalRead(switch4); * /
inputRead = analogRead(buttonSensor);
Serial.println(inputRead);
Delay(100);
om (inputRead > 685) {//Checking för knappen push
digitalWrite (led1, hög);
playTone(1915, 200); //Passes tonvärdet och varaktigheten av tonen till funktionen playTone
Delay(200);
digitalWrite (led1, låg);
inputArray [x] = 1;
Delay(50);
Serial.Print("");
Serial.Print(1);
om (inputArray [x]! = randomArray[x]) {//Checks värde input av användare och kontrollerar att den mot
Fail(); värdet i samma plats på den genererade arrayen
} //The misslyckas funktion kallas om det inte matchar
x ++;
}
om ((inputRead > 600) & & (inputRead < 680)) {
digitalWrite (led2, hög);
Delay(200);
digitalWrite (led2, låg);
inputArray [x]
= 2;
Delay(50);
Serial.Print("");
Serial.Print(2);
om (inputArray [x]
! = randomArray [x]
) {
Fail();
}
x ++;
}
om ((inputRead > 535) & & (inputRead < 590)) {
digitalWrite (led3, hög);
Delay(200);
digitalWrite (led3, låg);
inputArray [x]
= 3;
Delay(50);
Serial.Print("");
Serial.Print(3);
om (inputArray [x]
! = randomArray [x]
) {
Fail();
}
x ++;
}
om ((inputRead > 400) & & (inputRead < 525)) {
digitalWrite (led4, hög);
Delay(200);
digitalWrite (led4, låg);
inputArray [x]
= 4;
Delay(50);
Serial.Print("");
Serial.Print(4);
om (inputArray [x]
! = randomArray [x]
) {
Fail();
Serial.Print("failed");
}
x ++;
}
}
Delay(500);
tur ++; Ökar antalet tur, även den senaste åtgärden innan du startar funktionen output om igen
}
void fail() {//Function används om spelaren inte matchar sekvensen
för (int y = 0; y < = 5; y ++) {//Flashes lights för misslyckande
digitalWrite (led1, hög);
digitalWrite (led2, hög);
digitalWrite (led3, hög);
digitalWrite (led4, hög);
Delay(200);
digitalWrite (led1, låg);
digitalWrite (led2, låg);
digitalWrite (led3, låg);
digitalWrite (led4, låg);
Delay(200);
}
Delay(500);
sväng = -1; Återställer stänga värde så att spelet startar över utan behov av en återställningsknapp
} [/ code]