Hatkat

Juego Arduino

Sep 19th, 2023 (edited)
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.06 KB | None | 0 0
  1. #include <LiquidCrystal_I2C.h>
  2. #include <Wire.h>
  3.  
  4. LiquidCrystal_I2C lcd(0x27, 16, 2);
  5.  
  6. // pines de lectura de botones
  7. int pinBoton1 = A0;
  8. int pinBoton2 = A1;
  9. int pinBoton3 = A2;
  10. int pinBoton4 = A3;
  11. // pines de leds
  12. int pinLed1 = 2;
  13. int pinLed2 = 3;
  14. int pinLed3 = 4;
  15. int pinLed4 = 5;
  16. // pines de los sonidos
  17. int sonido1 = 13;
  18. int sonido2 = 11;
  19.  
  20. // array para memoria de leds
  21. int array[50];
  22. int arrayLeds[50];
  23.  
  24. //variable de la dificulatad;
  25. int espera = 250;
  26. // Variable de play y pause;
  27. int play = 0;
  28. // variable para cantidad aciertos;
  29. int acierto = 0;
  30. // Variable para saber que boton se presiono;
  31. int botonPresionado = 1;
  32. int nuevoLed;
  33. // Delay para el parpadeo de los leds
  34. int waitLed = 50;
  35. // Variable para la busqueda del juego
  36. int ledPresionados = -1;
  37.  
  38. // funcion de llenado del array
  39. void llenarArray() {
  40.   int ultimoNumero = 0;
  41.   // randomSeed(analogRead(A0) + analogRead(A1) + analogRead(A2) + analogRead(A3) + analogRead(A4) + analogRead(A5));
  42.  
  43.   unsigned long seed = micros();
  44.   randomSeed(seed);
  45.  
  46.   for (int i = 0; i < 50; i++) {
  47.     int numero = random(1, 5);
  48.     while (numero == ultimoNumero) {
  49.       numero = random(1, 5);
  50.     }
  51.     array[i] = numero;
  52.     ultimoNumero = numero;
  53.   }
  54. }
  55.  
  56. void mostrarMensajeInicio() {
  57.   // mostrar mensaje de inicio
  58.   lcd.setCursor(0, 0);
  59.   lcd.print("Boton 1-2: PLAY");
  60.   lcd.setCursor(0, 1);
  61.   if (espera == 250) {
  62.     lcd.print("Dificultad: 1");
  63.   } else if (espera == 120) {
  64.     lcd.print("Dificultad: 2");
  65.   } else if (espera == 80) {
  66.     lcd.print("Dificultad: 3");
  67.   }else if (espera == 60) {
  68.     lcd.print("Dificultad: 4");
  69.   }else if (espera == 35) {
  70.     lcd.print("Dificultad: 5");
  71.   }
  72. }
  73.  
  74. void encederLedInicio() {
  75.   digitalWrite(pinLed1, 1);
  76.   digitalWrite(pinLed2, 1);
  77.   digitalWrite(pinLed3, 1);
  78.   digitalWrite(pinLed4, 1);
  79. }
  80.  
  81. void apagarLedInicio() {
  82.   digitalWrite(pinLed1, 0);
  83.   digitalWrite(pinLed2, 0);
  84.   digitalWrite(pinLed3, 0);
  85.   digitalWrite(pinLed4, 0);
  86. }
  87.  
  88. void mensajeRegresivo() {
  89.   lcd.clear();
  90.   lcd.setCursor(0, 0);
  91.   lcd.print("Comenzando...");
  92.   int i;
  93.   for (i = 5; i > 0; i--) {
  94.     lcd.setCursor(0, 1);
  95.     lcd.print("   ---- " + String(i) + " ----");
  96.     if (i == 1) {
  97.       digitalWrite(sonido1, 1);
  98.       delay(1000);
  99.       digitalWrite(sonido1, 0);
  100.       lcd.clear();
  101.     } else {
  102.       digitalWrite(sonido1, 1);
  103.       delay(50);
  104.       digitalWrite(sonido1, 0);
  105.       delay(50);
  106.     }
  107.     encederLedInicio();
  108.     delay(1000);
  109.     apagarLedInicio();
  110.   }
  111. }
  112.  
  113. int notaDo = 620;
  114. int notaRe = 640;
  115. int notaMi = 660;
  116. int notaFa = 680;
  117. int cuarto = 1000 / 4;
  118. double pausa = 1.30;
  119. void inicio() {
  120.   lcd.clear();
  121.   lcd.setCursor(0, 0);
  122.   lcd.print("ACIERTO: " + String(acierto) + "     ");
  123.   int i;
  124.   for (i = 0; i <= acierto; i++) {
  125.     if (array[i] == 1) {
  126.       digitalWrite(pinLed1, 1);
  127.       tone(sonido2, notaDo, cuarto);
  128.       //delay(pausa * cuarto);
  129.       delay(espera);
  130.       digitalWrite(pinLed1, 0);
  131.       delay(espera);
  132.       analogWrite(sonido2, 0);
  133.     } else if (array[i] == 2) {
  134.       digitalWrite(pinLed2, 1);
  135.       tone(sonido2, notaRe, cuarto);
  136.       //delay(pausa * cuarto);
  137.       delay(espera);
  138.       digitalWrite(pinLed2, 0);
  139.       delay(espera);
  140.       analogWrite(sonido2, 0);
  141.     } else if (array[i] == 3) {
  142.       digitalWrite(pinLed3, 1);
  143.       tone(sonido2, notaMi, cuarto);
  144.       //delay(pausa * cuarto);
  145.       delay(espera);
  146.       digitalWrite(pinLed3, 0);
  147.       delay(espera);
  148.       analogWrite(sonido2, 0);
  149.     } else if (array[i] == 4) {
  150.       digitalWrite(pinLed4, 1);
  151.       tone(sonido2, notaFa, cuarto);
  152.       //delay(pausa * cuarto);
  153.       delay(espera);
  154.       digitalWrite(pinLed4, 0);
  155.       delay(espera);
  156.       analogWrite(sonido2, 0);
  157.     }
  158.   }
  159. }
  160.  
  161. bool juego(int maximoBuscado) {
  162.   int i;
  163.   for (i = 0; i <= maximoBuscado; i++) {
  164.     if (array[i] == arrayLeds[i]) {
  165.       lcd.clear();
  166.       lcd.setCursor(0, 0);
  167.       lcd.print("ACIERTO: " + String(i + 1) + "     ");
  168.       if (i == acierto) {
  169.         acierto++;
  170.         ledPresionados++;
  171.         delay(400);
  172.         return true;
  173.       }
  174.     } else {
  175.       digitalWrite(sonido1, 1);
  176.       delay(1000);
  177.       digitalWrite(sonido1, 0);
  178.       lcd.clear();
  179.       lcd.setCursor(0, 0);
  180.       lcd.print("PERDISTE           ");
  181.       lcd.setCursor(0, 1);
  182.       lcd.print("PUNTAJE: " + String(acierto) + " :)");
  183.       llenarArray();
  184.       delay(2000);
  185.       play = 0;
  186.       acierto = 0;
  187.       lcd.clear();
  188.       mostrarMensajeInicio();
  189.       return false;
  190.     }
  191.   }
  192. }
  193.  
  194. void setup() {
  195.   // inicio de botones
  196.   pinMode(pinBoton1, INPUT);
  197.   pinMode(pinBoton2, INPUT);
  198.   pinMode(pinBoton3, INPUT);
  199.   pinMode(pinBoton4, INPUT);
  200.   // inicio de leds
  201.   pinMode(pinLed1, OUTPUT);
  202.   pinMode(pinLed2, OUTPUT);
  203.   pinMode(pinLed3, OUTPUT);
  204.   pinMode(pinLed4, OUTPUT);
  205.   // inicio de sonidos
  206.   pinMode(sonido1, OUTPUT);
  207.   pinMode(sonido2, OUTPUT);
  208.  
  209.   Serial.begin(9600);
  210.   lcd.init();
  211.   lcd.backlight();
  212.  
  213.   // Mensaje de inicio
  214.   mostrarMensajeInicio();
  215. }
  216.  
  217. void loop() {
  218.  
  219.   if (digitalRead(pinBoton1) == 0 && digitalRead(pinBoton2) == 0) {
  220.     mensajeRegresivo();
  221.     play = 1;
  222.   } else {
  223.     mostrarMensajeInicio();
  224.   }
  225.  
  226.   if (digitalRead(pinBoton3) == 0 && digitalRead(pinBoton4) == 0) {
  227.     if (espera == 250) {
  228.       espera = 120;
  229.     } else if (espera == 120) {
  230.       espera = 80;
  231.     } else if (espera == 80) {
  232.       espera = 60;
  233.     }else if (espera == 60) {
  234.       espera = 35;
  235.     }else if (espera == 35) {
  236.       espera = 250;
  237.     }
  238.   }
  239.  
  240.   delay(100);
  241.  
  242.   if (play == 1) {
  243.     llenarArray();
  244.     while (play == 1) {
  245.       inicio();
  246.       ledPresionados = -1;
  247.       while (ledPresionados != acierto) {
  248.         if (digitalRead(pinBoton1) == 0) {
  249.           digitalWrite(pinLed1, 1);
  250.           tone(sonido2, notaDo, cuarto);
  251.           delay(waitLed);
  252.           digitalWrite(pinLed1, 0);
  253.           delay(waitLed);
  254.           ledPresionados++;
  255.           arrayLeds[ledPresionados] = 1;
  256.           if(juego(ledPresionados) == false){break;}
  257.         } else if (digitalRead(pinBoton2) == 0) {
  258.           digitalWrite(pinLed2, 1);
  259.           tone(sonido2, notaRe, cuarto);
  260.           delay(waitLed);
  261.           digitalWrite(pinLed2, 0);
  262.           delay(waitLed);
  263.           ledPresionados++;
  264.           arrayLeds[ledPresionados] = 2;
  265.           if(juego(ledPresionados) == false){break;}
  266.         } else if (digitalRead(pinBoton3) == 0) {
  267.           digitalWrite(pinLed3, 1);
  268.           tone(sonido2, notaMi, cuarto);
  269.           delay(waitLed);
  270.           digitalWrite(pinLed3, 0);
  271.           delay(waitLed);
  272.           ledPresionados++;
  273.           arrayLeds[ledPresionados] = 3;
  274.           if(juego(ledPresionados) == false){break;}
  275.         } else if (digitalRead(pinBoton4) == 0) {
  276.           digitalWrite(pinLed4, 1);
  277.           tone(sonido2, notaFa, cuarto);
  278.           delay(waitLed);
  279.           digitalWrite(pinLed4, 0);
  280.           delay(waitLed);
  281.           ledPresionados++;
  282.           arrayLeds[ledPresionados] = 4;
  283.           if(juego(ledPresionados) == false){break;}
  284.         }
  285.         delay(100);
  286.       }
  287.     }
  288.   }
  289. }
  290.  
Advertisement
Add Comment
Please, Sign In to add comment