/*

	Autor: G.Milimelis 2025  

*/

#include "LedControl.h" 	 // incluye libreria LedControl
#include <OneButton.h>     // https://github.com/mathertel/OneButton
#define BUZZER 4           // Definir el pin donde está conectado el buzzer

LedControl lc=LedControl(10,12,11,1);	// crea objeto

//OneButton
const byte pinBoton = 13;   // pin 2 ---- botón ---- GND
OneButton boton(pinBoton); // Crear un objeto OneButton asociado al pin pinBoton

int EstadoJuego=0;
int Caza=0;

void setup() {
  lc.shutdown(0,false);			// enciende la matriz
  lc.setIntensity(0,4);			// establece brillo
  lc.clearDisplay(0);			// blanquea matriz

  Serial.begin(9600);                  // Inicializar la comunicación serial
  boton.attachClick(clicSimple);         // Asociar la función clicSimple() al evento de un clic
  boton.attachDoubleClick(dobleClic);    // Asociar la función dobleClic() al evento de doble clic
  boton.attachLongPressStart(clicLargo); // Asociar la función clicLargo() al evento de clic largo

  pinMode(BUZZER, OUTPUT);   // Establecer el pin del buzzer


}

void loop(){
  noTone(BUZZER);
  boton.tick(); // Se debe llamar al método tick() en cada ciclo para manejar los eventos del botón



//  Enciende_1Led();

}

void Enciende_Leds(){
  for(int fila = 0; fila < 8; fila++) {			// itera por las filas
    for(int columna = 0; columna < 8; columna++) {	// itera por las columnas
      lc.setLed(0,fila,columna,true);			// enciende LED
      delay(100);					// demora de 100 mseg.
      lc.setLed(0,fila,columna,false);			// apaga LED
      delay(100);					// demora de 100 mseg.
    }
  }
}

void Enciende_1Led(){
   int fila = 0;
   int columna = 0;
      lc.setLed(0,fila,columna,true);			// enciende LED
      delay(1000);					// demora de 100 mseg.
      lc.setLed(0,fila,columna,false);			// apaga LED
      delay(1000);					// demora de 100 mseg.
}

void clicSimple() {
   Serial.println("Clic simple");
   Serial.println(EstadoJuego);
   Serial.println(Caza);
   tone(BUZZER, 700,200);
    if (EstadoJuego == 1) {
       Juego1();
    }
    if (EstadoJuego == 0) {
       JuegoON();
    }
}
 

void dobleClic() {
  Serial.println("Doble clic");
}

void clicLargo() {
  Serial.println("Clic largo");
  EstadoJuego = 0;
  Caza = 0;

   tone(BUZZER, 700,2000);
   //delay(2000);
   //noTone(BUZZER);
   //delay(1000);

      lc.clearDisplay(0);
      LedCentralOFF();
      delay(500);					// demora de 100 mseg.
}

void LedCentralON() {
   tone(BUZZER, 700,200);
   int fila = 3;
   int columna = 3;
   lc.setLed(0,fila + 0,columna + 0,true);			// enciende LED
   lc.setLed(0,fila + 0,columna + 1,true);			// enciende LED
   lc.setLed(0,fila + 1,columna + 0,true);			// enciende LED
   lc.setLed(0,fila + 1,columna + 1,true);			// enciende LED
}

void LedCentralOFF() {
   //tone(BUZZER, 700,200);
   int fila = 3;
   int columna = 3;
   lc.setLed(0,fila + 0,columna + 0,false);			// enciende LED
   lc.setLed(0,fila + 0,columna + 1,false);			// enciende LED
   lc.setLed(0,fila + 1,columna + 0,false);			// enciende LED
   lc.setLed(0,fila + 1,columna + 1,false);			// enciende LED
}

void JuegoON() {
  for(int i = 0; i<3; i++){
      tone(BUZZER, 700,200);
      LedCentralOFF();
      delay(400);					// demora de 100 mseg.
      LedCentralON();
      delay(400);					// demora de 100 mseg.
   }
   EstadoJuego = 1;
 }

void LedCapturasON() {
   tone(BUZZER, 700,200);
   lc.setLed(0,7,0,true);			// enciende LED
   lc.setLed(0,7,1,true);			// enciende LED
   lc.setLed(0,7,2,true);			// enciende LED
   lc.setLed(0,7,3,true);			// enciende LED
   lc.setLed(0,7,4,true);			// enciende LED
   lc.setLed(0,7,5,true);			// enciende LED
   lc.setLed(0,7,6,true);			// enciende LED
   lc.setLed(0,7,7,true);			// enciende LED
}

void LedCapturasOFF() {
   //tone(BUZZER, 700,200);
   lc.setLed(0,7,0,false);			// apaga LED
   lc.setLed(0,7,1,false);			// apaga LED
   lc.setLed(0,7,2,false);			// apaga LED
   lc.setLed(0,7,3,false);			// apaga LED
   lc.setLed(0,7,4,false);			// apaga LED
   lc.setLed(0,7,5,false);			// apaga LED
   lc.setLed(0,7,6,false);			// apaga LED
   lc.setLed(0,7,7,false);			// apaga LED
}



void Juego1() {
   Serial.print("EstadoJuego: ");
   Serial.println(EstadoJuego);
   Serial.print("Caza: ");
   Serial.println(Caza);

    if (Caza == 10) {
       tone(BUZZER, 700,200);
       LedCentralON();
       Caza = 11;
    }
    if (Caza == 9) {
       tone(BUZZER, 700,200);
       LedCentralOFF();
       for(int i = 0; i<20; i++){
           LedCapturasOFF();
           delay(200);					// demora de 100 mseg.
           LedCapturasON();
           delay(100);					// demora de 100 mseg.
       }
       Caza = 10;
       LedCapturasOFF();
       delay(500);					// demora de 100 mseg.
       LedCentralON();
       delay(500);					// demora de 100 mseg.
    }

    if (Caza == 8) {
           tone(BUZZER, 700,200);
           lc.setLed(0,0,7,false);			// enciende LED ,FILA,COLUMNA,true/false
           lc.setLed(0,7,7,true);			// enciende LED ,FILA,COLUMNA,true/false
           Caza = 9;
    }
    if (Caza == 7) {
           tone(BUZZER, 700,200);
           lc.setLed(0,0,6,false);			// enciende LED ,FILA,COLUMNA,true/false
           lc.setLed(0,7,6,true);			// enciende LED ,FILA,COLUMNA,true/false
           Caza = 8;
    }
    if (Caza == 6) {
           tone(BUZZER, 700,200);
           lc.setLed(0,0,5,false);			// enciende LED ,FILA,COLUMNA,true/false
           lc.setLed(0,7,5,true);			// enciende LED ,FILA,COLUMNA,true/false
           Caza = 7;
    }
    if (Caza == 5) {
           tone(BUZZER, 700,200);
           lc.setLed(0,0,4,false);			// enciende LED ,FILA,COLUMNA,true/false
           lc.setLed(0,7,4,true);			// enciende LED ,FILA,COLUMNA,true/false
           Caza = 6;
    }
    if (Caza == 4) {
           tone(BUZZER, 700,200);
           lc.setLed(0,0,3,false);			// enciende LED ,FILA,COLUMNA,true/false
           lc.setLed(0,7,3,true);			// enciende LED ,FILA,COLUMNA,true/false
           Caza = 5;
    }
    if (Caza == 3) {
           tone(BUZZER, 700,200);
           lc.setLed(0,0,2,false);			// enciende LED ,FILA,COLUMNA,true/false
           lc.setLed(0,7,2,true);			// enciende LED ,FILA,COLUMNA,true/false
           Caza = 4;
    }
    if (Caza == 2) {
           tone(BUZZER, 700,200);
           lc.setLed(0,0,1,false);			// enciende LED ,FILA,COLUMNA,true/false
           lc.setLed(0,7,1,true);			// enciende LED ,FILA,COLUMNA,true/false
           Caza = 3;
    }
    if (Caza == 1) {
           tone(BUZZER, 700,200);
           lc.setLed(0,0,0,false);			// enciende LED ,FILA,COLUMNA,true/false
           lc.setLed(0,7,0,true);			// enciende LED ,FILA,COLUMNA,true/false
           Caza = 2;
    }

    if (Caza == 0) {
       for(int i = 0; i<5; i++){
           tone(BUZZER, 700,200);
           lc.setLed(0,0,0,false);			// enciende LED ,FILA,COLUMNA,true/false
           lc.setLed(0,0,1,false);			// enciende LED ,FILA,COLUMNA,true/false
           lc.setLed(0,0,2,false);			// enciende LED ,FILA,COLUMNA,true/false
           lc.setLed(0,0,3,false);			// enciende LED ,FILA,COLUMNA,true/false
           lc.setLed(0,0,4,false);			// enciende LED ,FILA,COLUMNA,true/false
           lc.setLed(0,0,5,false);			// enciende LED ,FILA,COLUMNA,true/false
           lc.setLed(0,0,6,false);			// enciende LED ,FILA,COLUMNA,true/false
           lc.setLed(0,0,7,false);			// enciende LED ,FILA,COLUMNA,true/false
           delay(400);					// demora de 100 mseg.

           tone(BUZZER, 700,200);
           lc.setLed(0,0,0,true);			// enciende LED ,FILA,COLUMNA,true/false
           lc.setLed(0,0,1,true);			// enciende LED ,FILA,COLUMNA,true/false
           lc.setLed(0,0,2,true);			// enciende LED ,FILA,COLUMNA,true/false
           lc.setLed(0,0,3,true);			// enciende LED ,FILA,COLUMNA,true/false
           lc.setLed(0,0,4,true);			// enciende LED ,FILA,COLUMNA,true/false
           lc.setLed(0,0,5,true);			// enciende LED ,FILA,COLUMNA,true/false
           lc.setLed(0,0,6,true);			// enciende LED ,FILA,COLUMNA,true/false
           lc.setLed(0,0,7,true);			// enciende LED ,FILA,COLUMNA,true/false
           delay(400);					// demora de 100 mseg.
        }
    Caza = 1;
    }

 
      //EstadoJuego = 2;

 }
$abcdeabcde151015202530354045505560fghijfghij