Arduino Simon Says (2 / 4 stap)

Stap 2: De schets

De sketch werd oorspronkelijk gemaakt door Robert Spann terug in 2009. Ik gebruikte een eerdere versie van zijn schets aangezien ik hield niet van de manier waarop hij geïntegreerd geluid in latere versies van de schets. Als u wilt geven het geluid van het spel besloten heb ik om de Tone.h bibliotheek gebruiken. De bibliotheek is niet bijgewerkt sinds de release van Arduino 1.0, dus ging ik vooruit en bijgewerkt zodat ze compatibel zijn met Arduino 1.0. Daarbij ik knip een achterwaartse compatibiliteit met oudere IDEs. Dus als uw met een oudere versie van de IDE dan de link in de volgende stap gebruikt om te downloaden van de oorspronkelijke bibliotheek. Ik heb een kopie van de bijgewerkte bibliotheek op deze pagina toegevoegd. Wees dus zeker om het en plaats die het in uw omslag van Arduino/bibliotheken of de schets wordt niet gecompileerd onder de Arduino 1.0 te downloaden.

Hier is de schets. Een bestand van de schets is ook bevestigd. Als er dat vragen over het laat het me weten.

/ * Spel van Simon Says. Nu met geluidseffecten.

Oorspronkelijk gemaakt door Robert Spann
Code getrimd en geluidseffecten toegevoegd door digimike

Knoppen zijn moet worden ingesteld op er aangewezen pennen zonder pull-down weerstanden
en verbonden aan de grond eerder dan + 5.
*/
#include < Tone.h >
Toon 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 veld Duur2 [] = {100, 200, 100, 200, 100, 400, 100, 100, 100, 100, 200, 100, 500};
int Opmerking [] = {NOTE_C4, NOTE_C4, NOTE_G4, NOTE_C5, NOTE_G4, NOTE_C5};
int [van duur] = {100 100 100, 300, 100, 300};

Booleaanse knop [] = {2, 3, 4, 5}; De vier knop input pinnen
Booleaanse ledpin [] {8, 9, 10, 11} =;  LED pinnen
int draaien = 0;  Draai tegen
int buttonstate = 0;  knop staat checker
int randomArray [100]; Opzettelijk lang voor het opslaan van maximaal 100 ingangen (twijfelachtig iedereen krijgt dit ver)
int inputArray [100];

VOID Setup
{
Serial.begin(9600);
speakerpin.begin(12); spreker is op pin 13

voor (int x = 0; x < 4; x ++) / / LED pinnen zijn uitgangen
{
pinMode (ledpin [x], OUTPUT);
}

voor (int x = 0; x < 4; x ++)
{
pinMode (knop [x], INPUT);  knop pinnen zijn ingangen
digitalWrite (knop [x] hoge);  inschakelen van interne pullup; toetsen beginnen in hoge positie; logica omgedraaid
}

randomSeed(analogRead(0)); Met de randomArray voor de uitgangsfunctie voor het genereren van "meer willekeur" toegevoegd
voor (int thisNote = 0; thisNote < 13; thisNote ++) {}
Speel de volgende opmerking:
speakerpin.Play(starttune[thisNote]);
Houd de opmerking:
Als (thisNote == 0 || thisNote == 2 || thisNote == 4 || thisNote == 6)
{
digitalWrite (ledpin [0], hoge);
}
Als (thisNote == 1 || thisNote == 3 || thisNote == 5 || thisNote == 7 || thisNote == 9 || thisNote == 11)
{
digitalWrite (ledpin [1], hoge);
}
Als (thisNote == 8 || thisNote == 12)
{
digitalWrite (ledpin [2], hoge);
}
Als (thisNote == 10)
{
digitalWrite (ledpin [3], hoge);
}
delay(Duration2[thisNote]);
Stop voor de volgende notitie:
speakerpin.stop();
digitalWrite (ledpin [0], laag);
digitalWrite (ledpin [1], laag);
digitalWrite (ledpin [2], laag);
digitalWrite (ledpin [3], laag);
delay(25);
}
delay(1000);
}

void loop
{
voor (int y = 0; y < = 99; y ++)
{
functie voor het genereren van de array worden geëvenaard door de speler
digitalWrite (ledpin [0], hoge);
digitalWrite (ledpin [1], hoge);
digitalWrite (ledpin [2], hoge);
digitalWrite (ledpin [3], hoge);

voor (int thisNote = 0; thisNote < 6; thisNote ++) {}
Speel de volgende opmerking:
speakerpin.Play(Note[thisNote]);
Houd de opmerking:
delay(duration[thisNote]);
Stop voor de volgende notitie:
speakerpin.stop();
delay(25);
}

digitalWrite (ledpin [0], laag);
digitalWrite (ledpin [1], laag);
digitalWrite (ledpin [2], laag);
digitalWrite (ledpin [3], laag);
delay(1000);

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]);

voor (int y = 0; y < 4; y ++)
{

Als (randomArray [x] == 1 & & ledpin [y] == 8)
{//if verklaringen om weer te geven van de opgeslagen waarden in de matrix
digitalWrite (ledpin [y], hoge);
speakerpin.Play (NOTE_G3, 100);
delay(400);
digitalWrite (ledpin [y], laag);
delay(100);
}

Als (randomArray [x] == 2 & & ledpin [y] == 9)
{
digitalWrite (ledpin [y], hoge);
speakerpin.Play (NOTE_A3, 100);
delay(400);
digitalWrite (ledpin [y], laag);
delay(100);
}

Als (randomArray [x] == 3 & & ledpin [y] == 10)
{
digitalWrite (ledpin [y], hoge);
speakerpin.Play (NOTE_B3, 100);
delay(400);
digitalWrite (ledpin [y], laag);
delay(100);
}

Als (randomArray [x] == 4 & & ledpin [y] == 11)
{
digitalWrite (ledpin [y], hoge);
speakerpin.Play (NOTE_C4, 100);
delay(400);
digitalWrite (ledpin [y], laag);
delay(100);
}
}
}
}
input();
}
}

VOID input() {//Function voor het toestaan van gebruikersinvoer en controleren van de invoer tegen de gegenereerde matrix

voor (int x = 0; x < = beurt;)
{//Statement gecontroleerd door zet de graaf

voor (int y = 0; y < 4; y ++)
{

buttonstate = digitalRead(button[y]);

Als (buttonstate == LOW & & knop [y] == 2)
{//Checking voor knop duwen
digitalWrite (ledpin [0], hoge);
speakerpin.Play (NOTE_G3, 100);
delay(200);
digitalWrite (ledpin [0], laag);
inputArray [x] = 1;
delay(250);
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 (buttonstate == LOW & & knop [y] == 3)
{
digitalWrite (ledpin [1], hoge);
speakerpin.Play (NOTE_A3, 100);
delay(200);
digitalWrite (ledpin [1], laag);
inputArray [x] = 2;
delay(250);
Serial.Print("");
Serial.Print(2);
Als (inputArray [x]! = randomArray[x]) {}
Fail();
}
x ++;
}

Als (buttonstate == LOW & & knop [y] == 4)
{
digitalWrite (ledpin [2], hoge);
speakerpin.Play (NOTE_B3, 100);
delay(200);
digitalWrite (ledpin [2], laag);
inputArray [x] = 3;
delay(250);
Serial.Print("");
Serial.Print(3);
Als (inputArray [x]! = randomArray[x]) {}
Fail();
}
x ++;
}

Als (buttonstate == LOW & & knop [y] == 5)
{
digitalWrite (ledpin [3], hoge);
speakerpin.Play (NOTE_C4, 100);
delay(200);
digitalWrite (ledpin [3], laag);
inputArray [x] = 4;
delay(250);
Serial.Print("");
Serial.Print(4);
Als (inputArray [x]! = randomArray[x])
{
Fail();
}
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 < = 2; y ++)
{//Flashes licht voor mislukking

digitalWrite (ledpin [0], hoge);
digitalWrite (ledpin [1], hoge);
digitalWrite (ledpin [2], hoge);
digitalWrite (ledpin [3], hoge);
speakerpin.Play (NOTE_G3, 300);
delay(200);
digitalWrite (ledpin [0], laag);
digitalWrite (ledpin [1], laag);
digitalWrite (ledpin [2], laag);
digitalWrite (ledpin [3], laag);
speakerpin.Play (NOTE_C3, 300);
delay(200);
}
delay(500);
Draai = -1; Hiermee herstelt u terecht waarde het spel opnieuw gestart zonder noodzaak van een reset-knop
}

Gerelateerde Artikelen

Totale Recall - Arduino Simon Says op steroïden!

Totale Recall - Arduino Simon Says op steroïden!

Total Recall is een Simon gebaseerd spel voor de Arduino. Uw elementaire Arduino Simon Game bestaat uit 4 knoppen, 4 LEDs, een Arduino, wat code en misschien een spreker en geluidseffecten. Total Recall neemt dingen een stap verder door het toevoegen
Arduino Simon Say

Arduino Simon Say

dit is mijn versie van het Arduino Simon SayHebt u nodig:6 x 220 ohm weerstanden3 X leds, één voor elke kleur, groen, rood, geel3 X druk knoppen1 X ArduinoPaar kabelsStap 1: Circuits Diagram 5 volt geven via de knoppen aan de leds en pinnen 5,6,7 van
Maak je eigen spel van Simon Says met DIY Electro deeg en Arduino!

Maak je eigen spel van Simon Says met DIY Electro deeg en Arduino!

Aan de slagHet doel van dit Instructable is om te zetten uw electro deeg in een Capacitieve touch-knop met Arduino met behulp van de bibliotheek van de arduino CapSense en vervolgens met het maken van een Simon Says spel. We gebruiken een capacitieve
Simon Says met LEDs en geluid

Simon Says met LEDs en geluid

Hallo en welkom terug naar Instructables!Velen van ons hebben allemaal gespeeld Simon Says waar onvermijdelijk vind je jezelf huppelen op een voet terwijl het maken van olifant geluiden en vraag je je af bij jezelf waarom het was ooit een goed idee o
Arduino Simon zegt spel

Arduino Simon zegt spel

Dit is een leuke project dat ik deed met mijn kinderen tijdens de vakantie.Voor dit spel besloten heb ik om het gebruik van een oude doos van de iPhone 5c. Ik had het gewoon rondslingeren en het leek over de juiste maat.Lijst van onderdelen:(Opmerkin
Arduino Simon zegt

Arduino Simon zegt

Als kind heb ik altijd geliefd hoeveel mijn ouders haatte het spel van Simon Says, met behulp van een eenvoudige arduino, sommige LEDs, weerstanden, druktoetsen en een piezo die kunnen we het onszelf! Ik getest en dit circuit met behulp van 123D scha
Maak uw eigen spel voor 2 spelers Simon Says

Maak uw eigen spel voor 2 spelers Simon Says

Dit Instructable wordt uitgelegd hoe u een Simon Says spel met behulp van een Altera DE2-115 Cyclone IV FPGA-board. Dit project werd gedaan voor ECE2220 (digitale logica) bij de Universiteit van Manitoba.De video hierboven toont de werken VGA-uitgang
Simon Says game

Simon Says game

Ik heb een elektronisch geheugenspel gemaakt in de stijl van "Simon Says" (een icoon van de jaren 70). Het gebaseerd op een ARM cortex M0 microcontroller. U vindt een gedetailleerde bouw handleiding, schakelschema's en broncode op mijn website.
Interactief spel van Simon Says

Interactief spel van Simon Says

ik weet helemaal niet hoe dit spel maar de belangrijkste motivatie achter het geëvolueerd is ter verbetering van cognitieve verwerking en aandacht door het krijgen van de spelers te concentreren op een reeks van drum hits en herhaalt u vervolgens die
Android Bluetooth Flamethrower pompoen x4 Simon zegt

Android Bluetooth Flamethrower pompoen x4 Simon zegt

WAARSCHUWING! Dit project bevat zeer licht ontvlambaar combustibles.Hoewel ik neem extra voorzorgsmaatregelen, dit projectwordt niet aanbevolen om te proberen thuis. Ga op uw eigen risico.U wilt spice up van uw Halloween dit jaar met een beetje explo
Geavanceerde Simon zegt

Geavanceerde Simon zegt

Hallo allemaal!Deze instructables toont "Advanced Simon Says".Er is de reden waarom ik wil 'Voorschot' 'Simon Says'.U allen wellicht weet wat Simon Says en makkelijk te vinden met arduino project.(Eigenlijk, deed ik niet.. eerst noemde ik het 'M
Memory Game Arduino

Memory Game Arduino

Dit is een heel basic-versie van het spel "Simon says", of de memory spel - waar je gewoon kijken naar de LED's knipperen en klik op de knoppen in de juiste volgorde om het niveau en het hoofd naar de volgende te voltooien.Stap 1: De codeDe gehe
Snel & Easy Simon spel

Snel & Easy Simon spel

GEEN Jumpers! GEEN draden! GEEN solderen! GEEN Breadboard!Denken buiten de doos.Zodoende u zin voor uiterlijk vertoon vandoor uw micro-controller in concert met sommige perifere modellen van de add-on echt snel, voor vrienden of relatieve zijn op hun
Maak een SNES gevestigde verantwoordelijke voor de Arduino spel

Maak een SNES gevestigde verantwoordelijke voor de Arduino spel

In dit instructable, ik zal u tonen hoe te nemen een SNES-controller, sluit deze dan aan een Arduino, en maken een eenvoudige Simon Says spel.Dit kan worden gebruikt om een meer complexe spel, of misschien zelfs te proberen te maken van een Arduino g