Advertisement
Abelsor

Juego de Luces-Atrapa el Topo

Jan 27th, 2023
251
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2.                           ======= Juego de Luces - "Atrapa el Topo" ======
  3.  
  4.  Creado por: Abel Aquino
  5.  
  6.  El juego consite en pulsar al boton al momento en que el led (previamente indicado) se encienda. En caso de dar
  7.  con el led correcto se encienden las luces amarillas generando una nueva posicion. Caso contrario, se encienden
  8.  las luces rojas indicando el fallo hasta dar con el led correcto.
  9.  
  10.  */
  11.  
  12. #include <LiquidCrystal.h>
  13.  
  14. #define COLS 16 //Columnas
  15. #define ROWS 2  //Filas
  16.  
  17. LiquidCrystal lcd (A5, A4, A3, A2, A1, A0);
  18.  
  19.  
  20.  
  21. int tiempo = 500;
  22.  
  23.  
  24. volatile int respuesta;
  25. volatile int posicion;
  26.  
  27. volatile int opcion = 1;
  28.  
  29. int puntaje = 0;
  30. int vidas = 5;
  31.  
  32.  void setup() {
  33.    Serial.begin(9600);
  34.  
  35.    lcd.begin(COLS, ROWS);
  36.  
  37.    for (int i=4 ; i<14 ; i++){
  38.     pinMode(i,OUTPUT);
  39.     digitalWrite(i,LOW);
  40.    }
  41.  
  42.    attachInterrupt(digitalPinToInterrupt(2),respuesta_jugador,FALLING);
  43.  
  44.  
  45.   inicio();  // Juego de luces que dan inicio al juego
  46.  
  47.   delay(1000);
  48.   mostrar_respuesta();  // Genera la poscicion aleatoria e indica con tres parpadeos
  49.  
  50.   lcd.clear();
  51. }  
  52.  
  53.  
  54. void loop() {
  55.   switch(opcion){
  56.     case 1:
  57.         pantalla_inicio();
  58.         secuencia_1();
  59.     break;
  60.     case 2:
  61.         perder();
  62.     break;
  63.     case 3: // Para respuesta correcta
  64.  
  65.         Serial.write('b');
  66.         apagar_todo();
  67.         delay(500);
  68.         for(int i=0 ; i<3 ; i++){
  69.           respuesta_correcta();
  70.         }
  71.         apagar_todo();
  72.         delay(500);
  73.  
  74.         tiempo = tiempo - 10;  // Disminuye un poco la velocidad
  75.         puntaje = puntaje + 100;
  76.        
  77.         mostrar_respuesta();
  78.        
  79.         opcion = 1;  // Vuelve a la secuencia de luces
  80.     break;
  81.     case 4: // Para respuesta incorrecta
  82.         Serial.write('a');
  83.         apagar_todo();
  84.         delay(500);
  85.         for(int i=0 ; i<3 ; i++){
  86.           respuesta_incorrecta();
  87.         }
  88.         apagar_todo();
  89.         delay(500);
  90.        
  91.         tiempo = tiempo - 30;  // Disminuye un poco mas la velocidad
  92.         vidas = vidas - 1;
  93.  
  94.         if(vidas == 0){
  95.           opcion = 2;
  96.         }
  97.         else{
  98.           opcion = 1; // Vuelve a la secuencia de luces
  99.         }
  100.     break;
  101.   }
  102. }
  103.  
  104.   void inicio(){
  105. secuencia_1();
  106. secuencia_2();
  107.  
  108. secuencia_3();
  109. secuencia_4();
  110.  
  111.   }
  112. void secuencia_1(){//izquierda a derecha
  113.   apagar_todo();
  114.   for(int i=4 ; i<14 ; i++){
  115.     posicion = i;
  116.     digitalWrite(i,HIGH);
  117.     delay(tiempo);
  118.     digitalWrite(i,LOW);    
  119.   }
  120.   }
  121.  
  122.  
  123. void secuencia_2(){//derecha a izquierda
  124.   apagar_todo();
  125.   for(int i=13 ; i<4 ; i--){
  126.     posicion = i;
  127.     digitalWrite(i,HIGH);
  128.     delay(tiempo);
  129.     digitalWrite(i,LOW);
  130. }
  131.   }
  132. void secuencia_3(){//Izquierda a Derecha (Negativo)
  133.   encender_todo();
  134.   for(int i=4 ; i<14 ; i++){
  135.     posicion = i;
  136.     digitalWrite(i,LOW);
  137.  delay(tiempo);
  138.     digitalWrite(i,HIGH);
  139.   }
  140.   apagar_todo();
  141. }
  142. void secuencia_4(){//Derecha a Izquierda (Negativo)
  143.   encender_todo();
  144.   for(int i=13 ; i>=4 ; i--){
  145.     posicion = i;
  146.     digitalWrite(i,LOW);
  147.     delay(tiempo);
  148.     digitalWrite(i,HIGH);
  149.   }
  150.   apagar_todo();
  151.   }
  152.   void encender_todo(){
  153.     for (int i=4; i<14; i++){
  154.       digitalWrite (i,HIGH);
  155.     }
  156.   }
  157.   void apagar_todo(){
  158.     for (int i=4; i<14; i++){
  159.     digitalWrite (i,LOW);
  160.    }
  161.   }
  162. void generar_respuesta(){
  163.   respuesta = random(4,13);
  164.  
  165. }
  166. void mostrar_respuesta(){
  167.   generar_respuesta();
  168.  
  169.   for(int i=0; i<3; i++){
  170.   digitalWrite(respuesta,HIGH);
  171.   delay(500);
  172.   digitalWrite(respuesta,LOW);
  173.   delay(500);
  174.   }
  175. }
  176. void respuesta_incorrecta(){
  177.  
  178. digitalWrite(5,HIGH);
  179. digitalWrite(7,HIGH);
  180. digitalWrite(9,HIGH);
  181. digitalWrite(11,HIGH);
  182. digitalWrite(13,HIGH);
  183. delay (200);
  184. digitalWrite(5,LOW);
  185. digitalWrite(7,LOW);
  186. digitalWrite(9,LOW);
  187. digitalWrite(11,LOW);
  188. digitalWrite(13,LOW);
  189. delay (200);
  190.  
  191. }
  192. void respuesta_correcta(){
  193. digitalWrite(4,HIGH);
  194. digitalWrite(6,HIGH);
  195. digitalWrite(8,HIGH);
  196. digitalWrite(10,HIGH);
  197. digitalWrite(12,HIGH);
  198. delay (200);
  199. digitalWrite(4,LOW);
  200. digitalWrite(6,LOW);
  201. digitalWrite(8,LOW);
  202. digitalWrite(10,LOW);
  203. digitalWrite(12,LOW);
  204. delay (200);
  205.  
  206. }
  207.  
  208.  
  209. void respuesta_jugador(){
  210.   apagar_todo();
  211.   if(posicion == respuesta){
  212.     opcion = 3;
  213.   }
  214.  
  215.   else{
  216.     opcion = 4;
  217.   }
  218. }
  219.  
  220. void perder(){
  221.   apagar_todo();
  222.  
  223.   lcd.clear();
  224.   lcd.setCursor(4,0);
  225.   lcd.print("PERDISTE");
  226.  
  227.   delay(1000);
  228.  
  229.   lcd.setCursor(0,1);
  230.   lcd.print("Puntaje:");
  231.   lcd.setCursor(8,1);
  232.   lcd.print(puntaje);
  233.  
  234.   delay(500);
  235.  
  236.   for(int i=0 ; i<3 ; i++){
  237.     respuesta_correcta();
  238.     delay(300);
  239.     respuesta_incorrecta();
  240.     delay(300);
  241.   }
  242.   for(int i=0 ; i<3 ; i++){
  243.     secuencia_3();
  244.     secuencia_4();
  245.   }
  246.  
  247. }
  248.  
  249. void pantalla_inicio(){
  250.   lcd.setCursor(0,0);
  251.   lcd.print("Puntaje:");
  252.   lcd.setCursor(8,0);
  253.   lcd.print(puntaje);
  254.  
  255.   lcd.setCursor(0,1);
  256.   lcd.print("Vidas:");
  257.   lcd.setCursor(6,1);
  258.   lcd.print(vidas);
  259. }
  260.  
  261.  
  262.  
  263.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement