#include <SevSeg.h>
SevSeg sevseg; //Instanciamos el objeto SevSeg
#include "GFButton.h"
GFButton btn1 = GFButton(A0); //TIEMPO
//GFButton btn2 = GFButton(A1); //ACEPTAR CONFIGURACION
//GFButton btn3 = GFButton(A4); //WINNER
GFButton btnexp1 = GFButton(A3); // DETONADORES
GFButton btnexp2 = GFButton(A4); // DETONADORES
GFButton btnexp3 = GFButton(A5); // DETONADORES
const int RELAY_PIN = A1; //RELAY
const int pinBuzzer = A2; //BOCINA
int result; //PING
static int STATUSBUTTON = 1;
static int COMPARASTATUS=0;
static int VALIDASTATUS=0;
static int COMPARABOTON=0;
#define NOTE_G3 196
#define NOTE_DS5 622
#define NOTE_D5 587
#define NOTE_CS5 554
#define NOTE_E4 330
#define NOTE_G4 392
#define NOTE_E5 659
#define NOTE_C5 523
#define NOTE_G5 784
unsigned long startMillis;
unsigned long currentMillis;
const unsigned long period = 1000;
static int TIEMPO=0;
static int CONFIGURACION=1;
static int WINNER=1;
static int CERO=0;
static int contador=0;
static int REINICIO=0;
static int RESTA=0;
static int MIN=0;
void setup() {
byte Numdigits=4;
byte Comunes[]={2,3,4,5};
byte Segmentos[]={6,7,8,9,10,11,12,13};
byte Tipo=COMMON_CATHODE;
btn1.setPressHandler(button1_on_hold);
btn1.setHoldHandler(button2_on_hold);
btnexp1.setReleaseHandler(btnexp1_on_hold);
btnexp2.setReleaseHandler(btnexp2_on_hold);
btnexp3.setReleaseHandler(btnexp3_on_hold);
pinMode(RELAY_PIN, OUTPUT);
Serial.begin(9600);
Serial.println("Welcome to the Serial Monitor!");
Serial.println("---------------------------------");
sevseg.begin(Tipo,Numdigits,Comunes,Segmentos);
sevseg.setBrightness(0);
}
void loop() {
result=random(1,4);
if (STATUSBUTTON==0){
Serial.print("******* : ");
Serial.println(result);
switch(result){
case 1: //case result = 0
Serial.println("00000");
COMPARASTATUS=1;
break;
case 2: //case result = 1
Serial.println("11111");
COMPARASTATUS=2;
break;
case 3: //case result = 2
Serial.println("22222");
COMPARASTATUS=3;
break;
}
STATUSBUTTON=1;
}
if (TIEMPO==0){
btn1.process();
}
if (WINNER==0){
btnexp1.process();
btnexp2.process();
btnexp3.process();
}
if (VALIDASTATUS == 1){
if (COMPARASTATUS == COMPARABOTON){
GANADO();
}
if (COMPARASTATUS != COMPARABOTON){
PIERDE();
}
}
if (CERO==0){
Serial.print("Entra a 0 - ");
Serial.println(COMPARASTATUS);
sevseg.setNumber(0,2);
delay(300);
sevseg.setBrightness(10);
TIEMPO=0;
}
if (CERO==1){
noTone(pinBuzzer);
currentMillis = millis();
if(currentMillis - startMillis >= period){
Serial.print("Entra a 1 - ");
Serial.println(COMPARASTATUS);
if (RESTA==1){
if (contador>60){
contador=contador-40;
}
RESTA=0;
MIN=0;
}
MIN++;
if (MIN==60){
if (contador>60){
contador=contador-40;
}
MIN=0;
}
if(contador<=30){
tone(pinBuzzer,NOTE_G3);
Serial.print("Menos de 30: ");
Serial.println(contador);
}
if(contador>0){
contador--;
//tiempoejec+=1000;
}
else{
PIERDE();
Serial.println("******************");
Serial.println("QUEMAR TODO");
Serial.println("******************");
}
sevseg.setNumber(contador,2);
startMillis = currentMillis;
}
}
if (CERO==2){
Serial.print("Entra a 2 - ");
Serial.println(COMPARASTATUS);
sevseg.setNumber(contador,2);
static unsigned long tiempo2=millis()+500; //proximo evento
if(millis()>=tiempo2){
noTone(pinBuzzer);
}
}
if (CERO==3){
Serial.print("Entra a 3 - ");
Serial.println(COMPARASTATUS);
//sevseg.setNumber(contador,2);
//noTone(pinBuzzer);
digitalWrite(RELAY_PIN, LOW);
}
//Serial.print(contador);
sevseg.refreshDisplay();
}
void button1_on_hold(GFButton & button) {// TIEMPO
if (REINICIO == 0){
contador=0;
REINICIO++;
}
noTone(pinBuzzer);
contador=contador+100;
CERO=2;
tone(pinBuzzer,NOTE_G3);
CONFIGURACION=0;
WINNER=1;
digitalWrite(RELAY_PIN, LOW);
}
void button2_on_hold(GFButton & button) {//ACEPTAR CONFIGURACION
if (button.isFirstHold())
{
RESTA=1;
}
tone(pinBuzzer, NOTE_DS5);
delay(300);
tone(pinBuzzer, NOTE_D5);
delay(300);
tone(pinBuzzer, NOTE_CS5);
delay(300);
CONFIGURACION=1;
TIEMPO=1;
CERO=1;
WINNER=0;
STATUSBUTTON=0;
}
void btnexp1_on_hold(GFButton & button){
COMPARABOTON=1;
VALIDASTATUS=1;
Serial.println("-- 1 --");
}
void btnexp2_on_hold(GFButton & button){
Serial.println("-- 2 --");
COMPARABOTON=2;
VALIDASTATUS=1;
}
void btnexp3_on_hold(GFButton & button){
Serial.println("-- 3 --");
COMPARABOTON=3;
VALIDASTATUS=1;
}
void PIERDE(){
CERO=0;
MIN=0;
digitalWrite(RELAY_PIN, HIGH);
tone(pinBuzzer,440);
VALIDASTATUS=1;
}
//void button3_on_hold(GFButton & button) //WINNER
void GANADO(){
CERO=3;
TIEMPO=0;
WINNER=1;
VALIDASTATUS=0;
REINICIO=0;
tone(pinBuzzer, NOTE_E4); //
delay(150);
tone(pinBuzzer, NOTE_G4); //
delay(150);
tone(pinBuzzer, NOTE_E5);//
delay(150);
tone(pinBuzzer, NOTE_C5); //
delay(150);
tone(pinBuzzer, NOTE_D5); //esta
delay(150);
tone(pinBuzzer, NOTE_G5);
delay(150);
noTone(pinBuzzer);
}