Smart board-spel (6 / 21 steg)
Steg 6: Simon säger modul - anpassa koden
Så nu har vi koden och det fungerar perfekt med arduino på egen hand, är det dags att skriva koden så det kan användas i de viktigaste spelet modulen. Detta steg är ungefär samma för varje modul och om du gör det här sättet kan du enkelt utöka spelet modulen tills det tar slut portar (vilket är en hel del hamnar på arduino mega lol)
Först måste vi definiera variabler för modulen i huvudkoden jag har kommenterat allt så att det kan läsas.
Jag anpassade portarna till portarna på den rätta syn på bordet så hamnar radat upp bättre med förlägga av simon säger modul i styrelsen.
/ Vars för Simon säger
#include
Tone speakerpin;
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 Företagsvaraktighet 2 [] = {100, 200, 100, 200, 100, 400, 100, 100, 100, 100, 200, 100, 500};
int Observera [] = {NOTE_C4, NOTE_C4, NOTE_G4, NOTE_C5, NOTE_G4, NOTE_C5};
int längd [] = {100, 100, 100, 300, 100, 300};
int knappen [] = {26, 27, 28, 29}; Vier knop pins
int ledpin [] = {22, 23, 24, 25}; LED stift
int turnss = 0; turnss counter
int buttonstate = 0; knappen stat checker
int randomArray [100]. Verschillende volgorde
int inputArray [100].
Nästa uppföljning av installationsprogrammet som kommer att vara i setup kretsa av arduino här koden är fortfarande den samma exept för högtalare stift flyttade jag att för att bättre passa positionen för simon säger modul.
speakerpin.BEGIN(30);
för (int jag = 0; jag < 4; i ++) {
pinMode (ledpin [i], produktionen);
}
för (int jag = 0; jag < 4; i ++) {
pinMode (knappen [i], mata);
digitalWrite (knappen [i], hög);
}
randomSeed(analogRead(15)); Läggas till för att generera "mer slumpmässighet" med randomArray för funktionen output
för (int thisNote = 0; thisNote < 13; thisNote ++) {
spela nästa anteckning:
speakerpin.Play(starttune[thisNote]);
Håll anteckningen:
om (thisNote == 0 || thisNote == 2 || thisNote == 4 || thisNote == 6)
{
digitalWrite (ledpin [0], hög);
}
om (thisNote == 1 || thisNote == 3 || thisNote == 5 || thisNote == 7 || thisNote == 9 || thisNote == 11)
{
digitalWrite (ledpin [1], hög);
}
om (thisNote == 8 || thisNote == 12)
{
digitalWrite (ledpin [2], hög);
}
om (thisNote == 10)
{
digitalWrite (ledpin [3], hög);
}
Delay(duration2[thisNote]);
stopp för nästa anteckning:
speakerpin.stop();
digitalWrite (ledpin [0], låg);
digitalWrite (ledpin [1], låg);
digitalWrite (ledpin [2], låg);
digitalWrite (ledpin [3], låg);
Delay(25);
}
Delay(1000);
}
Huvudenheten spelet kontroller al spel och den tid de kommer att aktiveras, alla moduler loop funktioner sedan sätta in funktionerna som anropas baserat på vad som händer i huvudloop
////////////////////////////////////////////////////////////////////////
// //
Simon säger funktioner / /
// //
////////////////////////////////////////////////////////////////////////
void SimonSays() {
funktion för att skapa matrisen ska matchas av spelaren
digitalWrite (ledpin [0], hög);
digitalWrite (ledpin [1], hög);
digitalWrite (ledpin [2], hög);
digitalWrite (ledpin [3], hög);
för (int thisNote = 0; thisNote < 6; thisNote ++) {
spela nästa anteckning:
speakerpin.Play(Note[thisNote]);
Håll anteckningen:
Delay(duration[thisNote]);
stopp för nästa anteckning:
speakerpin.stop();
Delay(25);
}
digitalWrite (ledpin [0], låg);
digitalWrite (ledpin [1], låg);
digitalWrite (ledpin [2], låg);
digitalWrite (ledpin [3], låg);
Delay(1000);
för (int y = turnss, y < = turnss, y ++)
{//Limited av variabeln turnss
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 är turnss
för (int jag = 0; jag < = turnss; i ++)
{
Serial.Print(randomArray[i]);
för (int y = 0; y < 4; y ++)
{
om (randomArray [i] == 1 & & ledpin [y] == 22)
{//if deklarationer Visa lagrade värden i matrisen
digitalWrite (ledpin [y], hög);
speakerpin.Play (NOTE_G3, 100);
Delay(400);
digitalWrite (ledpin [y], låg);
Delay(100);
}
om (randomArray [i] == 2 & & ledpin [y] == 23)
{
digitalWrite (ledpin [y], hög);
speakerpin.Play (NOTE_A3, 100);
Delay(400);
digitalWrite (ledpin [y], låg);
Delay(100);
}
om (randomArray [i] == 3 & & ledpin [y] == 24)
{
digitalWrite (ledpin [y], hög);
speakerpin.Play (NOTE_B3, 100);
Delay(400);
digitalWrite (ledpin [y], låg);
Delay(100);
}
om (randomArray [i] == 4 & & ledpin [y] == 25)
{
digitalWrite (ledpin [y], hög);
speakerpin.Play (NOTE_C4, 100);
Delay(400);
digitalWrite (ledpin [y], låg);
Delay(100);
}
}
}
} 0
input();
}
void input() {
för (int jag = 0; jag < = turnss;)
{
för (int y = 0; y < 4; y ++)
{
ButtonState = digitalRead(button[y]);
om (buttonstate == låg & & knappen [y] == 26)
{//Checking för knappen push
digitalWrite (ledpin [0], hög);
speakerpin.Play (NOTE_G3, 100);
Delay(200);
digitalWrite (ledpin [0], låg);
inputArray [i] = 1;
Delay(250);
Serial.Print("");
Serial.Print(1);
om (inputArray [i]! = randomArray[i]) {
Fail();
}
i ++;
}
om (buttonstate == låg & & knappen [y] == 27)
{
digitalWrite (ledpin [1], hög);
speakerpin.Play (NOTE_A3, 100);
Delay(200);
digitalWrite (ledpin [1], låg);
inputArray [i] = 2;
Delay(250);
Serial.Print("");
Serial.Print(2);
om (inputArray [i]! = randomArray[i]) {
Fail();
}
i ++;
}
om (buttonstate == låg & & knappen [y] == 28)
{
digitalWrite (ledpin [2], hög);
speakerpin.Play (NOTE_B3, 100);
Delay(200);
digitalWrite (ledpin [2], låg);
inputArray [i] = 3;
Delay(250);
Serial.Print("");
Serial.Print(3);
om (inputArray [i]! = randomArray[i]) {
Fail();
}
i ++;
}
om (buttonstate == låg & & knappen [y] == 29)
{
digitalWrite (ledpin [3], hög);
speakerpin.Play (NOTE_C4, 100);
Delay(200);
digitalWrite (ledpin [3], låg);
inputArray [i] = 4;
Delay(250);
Serial.Print("");
Serial.Print(4);
om (inputArray [i]! = randomArray[i])
{
Fail();
}
i ++;
}
}
}
Delay(500);
turnss ++;
om (turnss == 4) {
bor = 5;
}
}
void fail() {
för (int y = 0; y < = 2; y ++)
{//Flashes ljus för misslyckande
digitalWrite (ledpin [0], hög);
digitalWrite (ledpin [1], hög);
digitalWrite (ledpin [2], hög);
digitalWrite (ledpin [3], hög);
speakerpin.Play (NOTE_G3, 300);
Delay(200);
digitalWrite (ledpin [0], låg);
digitalWrite (ledpin [1], låg);
digitalWrite (ledpin [2], låg);
digitalWrite (ledpin [3], låg);
speakerpin.Play (NOTE_C3, 300);
Delay(200);
}
Delay(500);
turnss--;
liv--;
Serial.println ("bor:" + String(lives));
}
Koden ovan är fortfarande samma som den ursprungliga simon säger kod. Det enda som ändras är att det är i sin egen funktion och om du inte spelet kommer att ta bort en av era liv. Om du når tur 4 och du vinner sätta spelet wil era liv på 5. Genom att ange ditt liv till 5 erkänner huvudspelet att spelet är över och har vunnit av spelaren.