Étape 2: Le croquis
L’esquisse a été initialement faite par Robert Spann en 2009. J’ai utilisé une version antérieure de son esquisse, étant donné que je n’aimais pas la façon dont il a intégré son dans des versions ultérieures de l’esquisse. Pour donner le son jeu, j’ai décidé d’utiliser la bibliothèque de Tone.h. La bibliothèque n’a pas été mis à jour depuis la version 1.0 de l’Arduino, je suis allé à venir et mis à jour pour être compatible avec Arduino 1.0. Ce faisant, j’ai découpé tout en arrière la compatibilité avec les anciennes IDEs. Donc, si votre exécutant une version antérieure de l’IDE puis utilisé le lien à l’étape suivante pour télécharger la bibliothèque originale. J’ai joint une copie de la bibliothèque mise à jour sur cette page. Donc n’oubliez pas de télécharger et lieu dans votre dossier Arduino/bibliothèques ou l’esquisse ne se compile pas sous Arduino 1.0.Voici l’esquisse. Un fichier de l’esquisse est également joint. S’il y a que des questions à ce sujet s’il vous plaît faites le moi savoir.
/ * Jeu Simon Says. Maintenant, avec des effets sonores.Initialement faite par Robert Spann
Code garnis et bruitages ajoutés par digimike
Boutons doivent être fixés sur des broches désignés là-bas sans tirer vers le bas de résistances
et relié à la terre plutôt que + 5.
*/
#include < Tone.h >
Ton 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 Durée2 [] = {100, 200, 100, 200, 100, 400, 100, 100, 100, 100, 200, 100, 500} ;
note d’int [] = {NOTE_C4, NOTE_C4, NOTE_G4, NOTE_C5, NOTE_G4, NOTE_C5} ;
la durée d’int [] = {100, 100, 100, 300, 100, 300} ;
bouton booléen [] = {2, 3, 4, 5} ; Les broches d’entrée quatre boutons
ledpin Boolean [] = {8, 9, 10, 11} ; Broches de la LED
Tournez int = 0 ; tourner le compteur
buttonstate int = 0 ; vérificateur d’État bouton
int randomArray [100] ; Intentionnellement de long pour stocker jusqu'à 100 entrées (douteux n’importe qui obtiendra ce jour)
int inputArray [100] ;
void setup()
{
Serial.Begin(9600) ;
speakerpin.Begin(12) ; le Président est sur la broche 13
pour (int x = 0; x < 4; x ++) / / LED broches sont sorties
{
pinMode (ledpin [x], sortie) ;
}
pour (int x = 0; x < 4; x ++)
{
pinMode (bouton [x], entrée) ; broches de bouton sont entrées
digitalWrite (bouton [x], HIGH) ; activez pullup interne ; touches démarrer en position haute ; logique inversée
}
randomSeed(analogRead(0)) ; Ajouté pour générer « plus aléatoire » avec le randomArray pour la fonction de sortie
pour (int thisNote = 0; thisNote < 13 ; thisNote ++) {}
Jouez la note suivante :
speakerpin.Play(starttune[thisNote]) ;
tenir la note :
Si (thisNote == 0 || thisNote == 2 || thisNote == 4 || thisNote == 6)
{
digitalWrite (ledpin [0], HIGH) ;
}
Si (thisNote == 1 || thisNote == 3 || thisNote == 5 || thisNote == 7 || thisNote == 9 || thisNote == 11)
{
digitalWrite (ledpin [1], HIGH) ;
}
Si (thisNote == 8 || thisNote == 12)
{
digitalWrite (ledpin [2], haut) ;
}
Si (thisNote == 10)
{
digitalWrite (ledpin [3], HIGH) ;
}
Delay(duration2[thisNote]) ;
arrêt pour la note suivante :
speakerpin.Stop() ;
digitalWrite (ledpin [0], faible) ;
digitalWrite (ledpin [1], faible) ;
digitalWrite (ledpin [2], faible) ;
digitalWrite (ledpin [3], faible) ;
Delay(25) ;
}
Delay(1000) ;
}
void loop()
{
pour (int y = 0; y < = 99; y ++)
{
fonction pour générer le tableau soit mis en correspondance par le joueur
digitalWrite (ledpin [0], HIGH) ;
digitalWrite (ledpin [1], HIGH) ;
digitalWrite (ledpin [2], haut) ;
digitalWrite (ledpin [3], HIGH) ;
pour (int thisNote = 0; thisNote < 6; thisNote ++) {}
Jouez la note suivante :
speakerpin.Play(note[thisNote]) ;
tenir la note :
Delay(Duration[thisNote]) ;
arrêt pour la note suivante :
speakerpin.Stop() ;
Delay(25) ;
}
digitalWrite (ledpin [0], faible) ;
digitalWrite (ledpin [1], faible) ;
digitalWrite (ledpin [2], faible) ;
digitalWrite (ledpin [3], faible) ;
Delay(1000) ;
pour (int y = virage; y < = virage; y ++)
{//Limited de la variable de la tour
Serial.println("") ; Une sortie série à suivre le long
Serial.Print ("tourner:") ;
Serial.Print(y) ;
Serial.println("") ;
randomArray [y] = aléatoire (1, 5) ; Vous affectez un nombre aléatoire (1-4) à la randomArray [y], y étant la tour compter
pour (int x = 0; x < = virage; x ++)
{
Serial.Print(randomArray[x]) ;
pour (int y = 0; y < 4; y ++)
{
Si (randomArray [x] == 1 & & ledpin [y] == 8)
{déclarations de //if pour afficher les valeurs stockées dans le tableau
digitalWrite (ledpin [y], HIGH) ;
speakerpin.Play (NOTE_G3, 100) ;
Delay(400) ;
digitalWrite (ledpin [y], faible) ;
Delay(100) ;
}
Si (randomArray [x] == 2 & & ledpin [y] == 9)
{
digitalWrite (ledpin [y], HIGH) ;
speakerpin.Play (NOTE_A3, 100) ;
Delay(400) ;
digitalWrite (ledpin [y], faible) ;
Delay(100) ;
}
Si (randomArray [x] == 3 & & ledpin [y] == 10)
{
digitalWrite (ledpin [y], HIGH) ;
speakerpin.Play (NOTE_B3, 100) ;
Delay(400) ;
digitalWrite (ledpin [y], faible) ;
Delay(100) ;
}
Si (randomArray [x] == 4 & & ledpin [y] == 11)
{
digitalWrite (ledpin [y], HIGH) ;
speakerpin.Play (NOTE_C4, 100) ;
Delay(400) ;
digitalWrite (ledpin [y], faible) ;
Delay(100) ;
}
}
}
}
Input() ;
}
}
input() Sub {//Function pour permettre l’entrée d’utilisateur et vérification d’entrée contre le tableau généré
pour (int x = 0; x < = virage;)
{//Statement contrôlée par tourner comte
pour (int y = 0; y < 4; y ++)
{
ButtonState = digitalRead(button[y]) ;
Si (buttonstate == LOW & & bouton [y] == 2)
{//Checking pour pousser le bouton
digitalWrite (ledpin [0], HIGH) ;
speakerpin.Play (NOTE_G3, 100) ;
Delay(200) ;
digitalWrite (ledpin [0], faible) ;
inputArray [x] = 1 ;
Delay(250) ;
Serial.Print("") ;
Serial.Print(1) ;
Si (inputArray [x]! = randomArray[x]) {//Checks valeur entrée par l’utilisateur et le vérifie contre
Fail() ; la valeur au même endroit sur le tableau généré
} Function fail //The est appelée si elle ne correspond pas
x ++ ;
}
Si (buttonstate == LOW & & bouton [y] == 3)
{
digitalWrite (ledpin [1], HIGH) ;
speakerpin.Play (NOTE_A3, 100) ;
Delay(200) ;
digitalWrite (ledpin [1], faible) ;
inputArray [x] = 2 ;
Delay(250) ;
Serial.Print("") ;
Serial.Print(2) ;
Si (inputArray [x]! = {randomArray[x])}
Fail() ;
}
x ++ ;
}
Si (buttonstate == LOW & & bouton [y] == 4)
{
digitalWrite (ledpin [2], haut) ;
speakerpin.Play (NOTE_B3, 100) ;
Delay(200) ;
digitalWrite (ledpin [2], faible) ;
inputArray [x] = 3 ;
Delay(250) ;
Serial.Print("") ;
Serial.Print(3) ;
Si (inputArray [x]! = {randomArray[x])}
Fail() ;
}
x ++ ;
}
Si (buttonstate == LOW & & bouton [y] == 5)
{
digitalWrite (ledpin [3], HIGH) ;
speakerpin.Play (NOTE_C4, 100) ;
Delay(200) ;
digitalWrite (ledpin [3], faible) ;
inputArray [x] = 4 ;
Delay(250) ;
Serial.Print("") ;
Serial.Print(4) ;
Si (inputArray [x]! = randomArray[x])
{
Fail() ;
}
x ++ ;
}
}
}
Delay(500) ;
tour ++ ; Incrémente le nombre de tour, aussi la dernière action avant de démarrer la fonction sortie maintes fois
}
fail() Sub {//Function utilisé si le joueur ne peut pas correspondre à la séquence
pour (int y = 0; y < = 2; y ++)
{//Flashes s’allume pour défaut
digitalWrite (ledpin [0], HIGH) ;
digitalWrite (ledpin [1], HIGH) ;
digitalWrite (ledpin [2], haut) ;
digitalWrite (ledpin [3], HIGH) ;
speakerpin.Play (NOTE_G3, 300) ;
Delay(200) ;
digitalWrite (ledpin [0], faible) ;
digitalWrite (ledpin [1], faible) ;
digitalWrite (ledpin [2], faible) ;
digitalWrite (ledpin [3], faible) ;
speakerpin.Play (NOTE_C3, 300) ;
Delay(200) ;
}
Delay(500) ;
tourner = -1 ; Réinitialisations tourner valeur jusqu'à ce que le jeu recommence sans avoir besoin d’un bouton de réinitialisation
}