Paso 2: El dibujo
El bosquejo fue hecho originalmente por Robert Spann en el 2009. Usé una versión anterior de su boceto puesto que no me gustó la manera integró sonido en versiones posteriores del bosquejo. Para dar el sonido del juego he decidido utilizar la biblioteca de Tone.h. La biblioteca no ha sido actualizada desde el lanzamiento de Arduino 1.0, así que siguió adelante y actualizado para ser compatible con Arduino 1.0. Al hacerlo recorte alguno hacia atrás compatibilidad con más viejos IDEs. Así que si luego tu ejecutando una versión antigua del IDE utiliza el enlace en el paso siguiente para descargar la biblioteca original. He conectado una copia de la biblioteca que se actualiza en esta página. Así que asegúrese de descargar y lugar en la carpeta de Arduino y las bibliotecas o el bosquejo no compilará en Arduino 1.0.Aquí está el bosquejo. También se adjunta un archivo del bosquejo. Si hay que cualquier duda sobre ello por favor hágamelo saber.
/ * Juego de Simon Says. Ahora con efectos de sonido.HCE de Robert Spann
Código recortado y efectos de sonido añadidos por digimike
Los botones son a pernos designados allí sin desplegable resistencias
y conectado a tierra algo entonces + 5.
*/
#include < Tone.h >
Tono 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 duration2 [] = {100, 200, 100, 200, 100, 400, 100, 100, 100, 100, 200, 100, 500};
int Nota [] = {NOTE_C4, NOTE_C4, NOTE_G4, NOTE_C5, NOTE_G4, NOTE_C5};
duración de int [] = {100, 100, 100, 300, 100, 300};
botón Boolean [] = {2, 3, 4, 5}; Los cuatro botón pines de entrada
ledpin Boolean [] = {8, 9, 10, 11}; Pasadores LED
int vuelta = 0; girar contra
int buttonstate = 0; Comprobador de estado de botón
randomArray int [100]; Intencionalmente de largo para almacenar hasta 100 entradas (dudoso que nadie conseguirá esto ahora)
int inputArray [100];
void setup()
{
Serial.Begin(9600);
speakerpin.Begin(12); es en el pin 13
para (int x = 0; x < 4; x ++) / / LED alfileres son salidas
{
pinMode (ledpin [x], salida);
}
para (int x = 0; x < 4; x ++)
{
pinMode (botón [x], INPUT); botón pines son entradas
digitalWrite (botón [x], HIGH); permiten pullup interna; botones de inicio en posición alta; lógica invertida
}
randomSeed(analogRead(0)); Agregado para generar "más aleatoriedad" con randomArray para la función de salida
para (int thisNote = 0; thisNote < 13; thisNote ++) {}
jugar la siguiente NOTA:
speakerpin.Play(starttune[thisNote]);
sostener la Nota:
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], HIGH);
}
Si (thisNote == 10)
{
digitalWrite (ledpin [3], HIGH);
}
Delay(duration2[thisNote]);
parada para la siguiente NOTA:
speakerpin.STOP();
digitalWrite (ledpin [0], LOW);
digitalWrite (ledpin [1], LOW);
digitalWrite (ledpin [2], LOW);
digitalWrite (ledpin [3], LOW);
Delay(25);
}
Delay(1000);
}
void loop()
{
para (int y = 0; y < = 99; y ++)
{
función para generar la matriz de ser igualada por el jugador
digitalWrite (ledpin [0], HIGH);
digitalWrite (ledpin [1], HIGH);
digitalWrite (ledpin [2], HIGH);
digitalWrite (ledpin [3], HIGH);
para (int thisNote = 0; thisNote < 6; thisNote ++) {}
jugar la siguiente NOTA:
speakerpin.Play(Note[thisNote]);
sostener la Nota:
Delay(Duration[thisNote]);
parada para la siguiente NOTA:
speakerpin.STOP();
Delay(25);
}
digitalWrite (ledpin [0], LOW);
digitalWrite (ledpin [1], LOW);
digitalWrite (ledpin [2], LOW);
digitalWrite (ledpin [3], LOW);
Delay(1000);
para (int y = vuelta; y < = vuelta; y ++)
{//Limited de la variable a su vez
Serial.println(""); Algunas salida serie a seguir a lo largo de
Serial.Print ("convertir:");
Serial.Print(y);
Serial.println("");
randomArray [y] = al azar (1, 5); Asignar a un número al azar (1-4) a randomArray [y], y siendo la vuelta cuenta
para (int x = 0; x < = vuelta; x ++)
{
Serial.Print(randomArray[x]);
para (int y = 0; y < 4; y ++)
{
Si (randomArray [x] == 1 & & ledpin [y] == 8)
{sentencias //if para mostrar los valores almacenados en la matriz
digitalWrite (ledpin [y], HIGH);
speakerpin.Play (NOTE_G3, 100);
Delay(400);
digitalWrite (ledpin [y], LOW);
Delay(100);
}
Si (randomArray [x] == 2 & & ledpin [y] == 9)
{
digitalWrite (ledpin [y], HIGH);
speakerpin.Play (NOTE_A3, 100);
Delay(400);
digitalWrite (ledpin [y], LOW);
Delay(100);
}
Si (randomArray [x] == 3 & & ledpin [y] == 10)
{
digitalWrite (ledpin [y], HIGH);
speakerpin.Play (NOTE_B3, 100);
Delay(400);
digitalWrite (ledpin [y], LOW);
Delay(100);
}
Si (randomArray [x] == 4 & & ledpin [y] == 11)
{
digitalWrite (ledpin [y], HIGH);
speakerpin.Play (NOTE_C4, 100);
Delay(400);
digitalWrite (ledpin [y], LOW);
Delay(100);
}
}
}
}
INPUT();
}
}
void input() {//Function para permitir la entrada del usuario y comprobación de entrada contra la matriz generada
para (int x = 0; x < = vuelta;)
{//Statement controlado por girar a la cuenta
para (int y = 0; y < 4; y ++)
{
ButtonState = digitalRead(button[y]);
Si (buttonstate == baja & & botón [y] == 2)
{//Checking para pulsar botón
digitalWrite (ledpin [0], HIGH);
speakerpin.Play (NOTE_G3, 100);
Delay(200);
digitalWrite (ledpin [0], LOW);
inputArray [x] = 1;
Delay(250);
Serial.Print("");
Serial.Print(1);
Si (inputArray [x]! = randomArray[x]) {entrada de valor //Checks por el usuario y los controles contra
FAIL(); el valor en el mismo lugar en la matriz generada
} Se llama función de fail //The si no coincide con
x ++;
}
Si (buttonstate == baja & & botón [y] == 3)
{
digitalWrite (ledpin [1], HIGH);
speakerpin.Play (NOTE_A3, 100);
Delay(200);
digitalWrite (ledpin [1], LOW);
inputArray [x] = 2;
Delay(250);
Serial.Print("");
Serial.Print(2);
Si (inputArray [x]! = {randomArray[x])}
FAIL();
}
x ++;
}
Si (buttonstate == baja & & botón [y] == 4)
{
digitalWrite (ledpin [2], HIGH);
speakerpin.Play (NOTE_B3, 100);
Delay(200);
digitalWrite (ledpin [2], LOW);
inputArray [x] = 3;
Delay(250);
Serial.Print("");
Serial.Print(3);
Si (inputArray [x]! = {randomArray[x])}
FAIL();
}
x ++;
}
Si (buttonstate == baja & & botón [y] == 5)
{
digitalWrite (ledpin [3], HIGH);
speakerpin.Play (NOTE_C4, 100);
Delay(200);
digitalWrite (ledpin [3], LOW);
inputArray [x] = 4;
Delay(250);
Serial.Print("");
Serial.Print(4);
Si (inputArray [x]! = randomArray[x])
{
FAIL();
}
x ++;
}
}
}
Delay(500);
a su vez ++; Aumenta la cuenta a su vez, también la última acción antes de iniciar la función de salida de nuevo
}
void fail() {//Function utilizado si el jugador no coincide con la secuencia
para (int y = 0; y < = 2; y ++)
{//Flashes de luces para el fracaso
digitalWrite (ledpin [0], HIGH);
digitalWrite (ledpin [1], HIGH);
digitalWrite (ledpin [2], HIGH);
digitalWrite (ledpin [3], HIGH);
speakerpin.Play (NOTE_G3, 300);
Delay(200);
digitalWrite (ledpin [0], LOW);
digitalWrite (ledpin [1], LOW);
digitalWrite (ledpin [2], LOW);
digitalWrite (ledpin [3], LOW);
speakerpin.Play (NOTE_C3, 300);
Delay(200);
}
Delay(500);
vuelta = -1; Restablece gire valor para que el juego se inicia sin necesidad de un botón de reset
}