Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- ======= Juego de Luces - "Atrapa el Topo" ======
- Creado por: Abel Aquino
- El juego consite en pulsar al boton al momento en que el led (previamente indicado) se encienda. En caso de dar
- con el led correcto se encienden las luces amarillas generando una nueva posicion. Caso contrario, se encienden
- las luces rojas indicando el fallo hasta dar con el led correcto.
- */
- #include <LiquidCrystal.h>
- #define COLS 16 //Columnas
- #define ROWS 2 //Filas
- LiquidCrystal lcd (A5, A4, A3, A2, A1, A0);
- int tiempo = 500;
- volatile int respuesta;
- volatile int posicion;
- volatile int opcion = 1;
- int puntaje = 0;
- int vidas = 5;
- void setup() {
- Serial.begin(9600);
- lcd.begin(COLS, ROWS);
- for (int i=4 ; i<14 ; i++){
- pinMode(i,OUTPUT);
- digitalWrite(i,LOW);
- }
- attachInterrupt(digitalPinToInterrupt(2),respuesta_jugador,FALLING);
- inicio(); // Juego de luces que dan inicio al juego
- delay(1000);
- mostrar_respuesta(); // Genera la poscicion aleatoria e indica con tres parpadeos
- lcd.clear();
- }
- void loop() {
- switch(opcion){
- case 1:
- pantalla_inicio();
- secuencia_1();
- break;
- case 2:
- perder();
- break;
- case 3: // Para respuesta correcta
- Serial.write('b');
- apagar_todo();
- delay(500);
- for(int i=0 ; i<3 ; i++){
- respuesta_correcta();
- }
- apagar_todo();
- delay(500);
- tiempo = tiempo - 10; // Disminuye un poco la velocidad
- puntaje = puntaje + 100;
- mostrar_respuesta();
- opcion = 1; // Vuelve a la secuencia de luces
- break;
- case 4: // Para respuesta incorrecta
- Serial.write('a');
- apagar_todo();
- delay(500);
- for(int i=0 ; i<3 ; i++){
- respuesta_incorrecta();
- }
- apagar_todo();
- delay(500);
- tiempo = tiempo - 30; // Disminuye un poco mas la velocidad
- vidas = vidas - 1;
- if(vidas == 0){
- opcion = 2;
- }
- else{
- opcion = 1; // Vuelve a la secuencia de luces
- }
- break;
- }
- }
- void inicio(){
- secuencia_1();
- secuencia_2();
- secuencia_3();
- secuencia_4();
- }
- void secuencia_1(){//izquierda a derecha
- apagar_todo();
- for(int i=4 ; i<14 ; i++){
- posicion = i;
- digitalWrite(i,HIGH);
- delay(tiempo);
- digitalWrite(i,LOW);
- }
- }
- void secuencia_2(){//derecha a izquierda
- apagar_todo();
- for(int i=13 ; i<4 ; i--){
- posicion = i;
- digitalWrite(i,HIGH);
- delay(tiempo);
- digitalWrite(i,LOW);
- }
- }
- void secuencia_3(){//Izquierda a Derecha (Negativo)
- encender_todo();
- for(int i=4 ; i<14 ; i++){
- posicion = i;
- digitalWrite(i,LOW);
- delay(tiempo);
- digitalWrite(i,HIGH);
- }
- apagar_todo();
- }
- void secuencia_4(){//Derecha a Izquierda (Negativo)
- encender_todo();
- for(int i=13 ; i>=4 ; i--){
- posicion = i;
- digitalWrite(i,LOW);
- delay(tiempo);
- digitalWrite(i,HIGH);
- }
- apagar_todo();
- }
- void encender_todo(){
- for (int i=4; i<14; i++){
- digitalWrite (i,HIGH);
- }
- }
- void apagar_todo(){
- for (int i=4; i<14; i++){
- digitalWrite (i,LOW);
- }
- }
- void generar_respuesta(){
- respuesta = random(4,13);
- }
- void mostrar_respuesta(){
- generar_respuesta();
- for(int i=0; i<3; i++){
- digitalWrite(respuesta,HIGH);
- delay(500);
- digitalWrite(respuesta,LOW);
- delay(500);
- }
- }
- void respuesta_incorrecta(){
- digitalWrite(5,HIGH);
- digitalWrite(7,HIGH);
- digitalWrite(9,HIGH);
- digitalWrite(11,HIGH);
- digitalWrite(13,HIGH);
- delay (200);
- digitalWrite(5,LOW);
- digitalWrite(7,LOW);
- digitalWrite(9,LOW);
- digitalWrite(11,LOW);
- digitalWrite(13,LOW);
- delay (200);
- }
- void respuesta_correcta(){
- digitalWrite(4,HIGH);
- digitalWrite(6,HIGH);
- digitalWrite(8,HIGH);
- digitalWrite(10,HIGH);
- digitalWrite(12,HIGH);
- delay (200);
- digitalWrite(4,LOW);
- digitalWrite(6,LOW);
- digitalWrite(8,LOW);
- digitalWrite(10,LOW);
- digitalWrite(12,LOW);
- delay (200);
- }
- void respuesta_jugador(){
- apagar_todo();
- if(posicion == respuesta){
- opcion = 3;
- }
- else{
- opcion = 4;
- }
- }
- void perder(){
- apagar_todo();
- lcd.clear();
- lcd.setCursor(4,0);
- lcd.print("PERDISTE");
- delay(1000);
- lcd.setCursor(0,1);
- lcd.print("Puntaje:");
- lcd.setCursor(8,1);
- lcd.print(puntaje);
- delay(500);
- for(int i=0 ; i<3 ; i++){
- respuesta_correcta();
- delay(300);
- respuesta_incorrecta();
- delay(300);
- }
- for(int i=0 ; i<3 ; i++){
- secuencia_3();
- secuencia_4();
- }
- }
- void pantalla_inicio(){
- lcd.setCursor(0,0);
- lcd.print("Puntaje:");
- lcd.setCursor(8,0);
- lcd.print(puntaje);
- lcd.setCursor(0,1);
- lcd.print("Vidas:");
- lcd.setCursor(6,1);
- lcd.print(vidas);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement