Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <LiquidCrystal.h>;
- //Buttons
- int BT_UP = 50;
- int BT_DOWN = 44;
- int BT_RIGHT = 42;
- int BT_LEFT = 48;
- int BT_RED = 52;
- int BT_DEFUSER = 40; // not implemented
- //leds
- const int ledVerde = 9;
- const int ledRojo = 8 ;
- const int ledDefuser = 2;
- //
- //LSD
- LiquidCrystal lcd(53, 51, 49, 47, 45, 43);
- //TIME INTS
- int MINUTOSJUEGO = 15;
- int MINUTOSBOMBA = 7;
- int SEGUNDOSACTIVAR = 15;
- // SOUND TONES
- int tonoPitido = 3000;
- int tonoAlarma1 = 700;
- int tonoAlarma2 = 2600;
- int tonoActivada = 1330;
- void setup(){
- lcd.begin(16, 2);
- lcd.print("Iniciando");
- pinMode(BT_UP, INPUT);
- pinMode(BT_DOWN, INPUT);
- pinMode(BT_RIGHT, INPUT);
- pinMode(BT_LEFT, INPUT);
- pinMode(BT_RED, INPUT);
- pinMode(BT_DEFUSER, INPUT);
- // CONFIGURE THE BARS OF PROGRESS BAR
- byte bar1[8] = {
- B10000,
- B10000,
- B10000,
- B10000,
- B10000,
- B10000,
- B10000,
- };
- byte bar2[8] = {
- B11000,
- B11000,
- B11000,
- B11000,
- B11000,
- B11000,
- B11000,
- };
- byte bar3[8] = {
- B11100,
- B11100,
- B11100,
- B11100,
- B11100,
- B11100,
- B11100,
- };
- byte bar4[8] = {
- B11110,
- B11110,
- B11110,
- B11110,
- B11110,
- B11110,
- B11110,
- };
- byte bar5[8] = {
- B11111,
- B11111,
- B11111,
- B11111,
- B11111,
- B11111,
- B11111,
- };
- lcd.createChar(0,bar1);
- lcd.createChar(1,bar2);
- lcd.createChar(2,bar3);
- lcd.createChar(3,bar4);
- lcd.createChar(4,bar5);
- }
- // initialize the library with the numbers of the interface pins
- void loop(){
- menuPrincipal();
- }
- void menuPrincipal(){ //MAIN MENU
- //Draw menu
- lcd.clear();
- lcd.setCursor(0, 0);
- int i=0;
- char* menu1[]={
- "Juego Custom","Juego Rapido", "Configuracion" }; // HERE YOU CAN ADD MORE ITEMS ON THE MAIN MENU
- lcd.print(menu1[i]);
- while(1){
- if(digitalRead(BT_UP)== HIGH && i>0){
- tone(11,2400,30);
- i--;
- lcd.clear();
- lcd.print(menu1[i]);
- delay(500);
- }
- if(digitalRead(BT_DOWN)== HIGH && i<2){
- tone(11,2400,30);
- i++;
- lcd.clear();
- lcd.print(menu1[i]);
- delay(500);
- }
- if(digitalRead(BT_RED)== HIGH){
- tone(11,2400,30);
- lcd.clear();
- switch (i){
- case 0:
- configJuegoRapido();
- break;
- case 1:
- configJuegoRapido();
- break;
- case 2:
- config();
- break;
- }
- }
- }
- }
- void juegoCustom(){
- juego();
- }
- void config(){
- // need to implement a read and write config function... to terminate this option
- while(1){
- lcd.setCursor(0,0);
- lcd.print("config menu");
- delay(50);
- }
- }
- void game(){
- delay(500);
- while(digitalRead(BT_RED)== LOW){
- lcd.clear();
- lcd.setCursor(0,0);
- lcd.print("JUEGO LISTO");
- lcd.setCursor(0,1);
- lcd.print("PARA INICIAR");
- delay(500);
- lcd.clear();
- lcd.setCursor(0,1);
- lcd.print("BOTON ROJO");
- lcd.setCursor(0,1);
- lcd.print("PARA COMENZAR");
- delay(500);
- }
- lcd.clear();
- lcd.setCursor(0,0);
- lcd.print("INICIANDO JUEGO");
- lcd.setCursor(0,1);
- tone(11,2000,100);
- lcd.print(" EN 5 ");
- delay(1000);
- lcd.clear();
- lcd.setCursor(0,0);
- lcd.print("INICIANDO JUEGO");
- lcd.setCursor(0,1);
- tone(11,2000,100);
- lcd.print(" EN 4 ");
- delay(1000);
- lcd.clear();
- lcd.setCursor(0,0);
- lcd.print("INICIANDO JUEGO");
- lcd.setCursor(0,1);
- tone(11,2000,100);
- lcd.print(" EN 3 ");
- delay(1000);
- lcd.clear();
- lcd.setCursor(0,0);
- lcd.print("INICIANDO JUEGO");
- lcd.setCursor(0,1);
- tone(11,2000,100);
- lcd.print(" EN 2 ");
- delay(1000);
- lcd.clear();
- lcd.setCursor(0,0);
- lcd.print("INICIANDO JUEGO");
- lcd.setCursor(3,1);
- tone(11,2000,100);
- lcd.print(MINUTOSJUEGO);
- lcd.print(":00.000");
- delay(1000);
- lcd.clear();
- lcd.setCursor(0,0);
- lcd.print("TIEMPO DE MISION");
- int minutos=MINUTOSJUEGO-1;
- unsigned long iTiempo=millis();
- unsigned long aTiempo;
- while(1){ // this is the important code, is a little messy but works good.
- if(((millis()- iTiempo)%1000)>= 0 && (millis()- iTiempo)%1000 <= 20)
- {
- analogWrite(ledVerde, 255);
- }
- if(((millis()- iTiempo)%1000)>= 50 && (millis()- iTiempo)%1000 <= 100)
- {
- analogWrite(ledVerde,0);
- }
- lcd.setCursor(0,0);
- lcd.print("TIEMPO DE MISION");
- aTiempo=millis()- iTiempo;
- lcd.setCursor(3,1);
- if(minutos-aTiempo/60000==0 && 59-((aTiempo/1000)%60)==0)
- {
- lcd.clear();
- while(1){
- lcd.setCursor(0,0);
- lcd.print("JUEGO TERMINADO!");
- lcd.setCursor(0,1);
- lcd.print("GANAN A-TERROR");
- for(int i = 1000; i>200; i--){
- tone(11,i);
- delay(5);
- }
- noTone(11);
- delay(5000);
- lcd.clear();
- menuPrincipal();
- }
- }
- if((minutos-aTiempo/60000)<10){
- lcd.print("0");
- lcd.print(minutos-aTiempo/60000);
- }
- else
- {
- lcd.print(minutos-aTiempo/60000);
- }
- lcd.print(":");
- if((59-((aTiempo/1000)%60))<10){
- lcd.print("0");
- lcd.print(59-((aTiempo/1000)%60));
- }
- else {
- lcd.print(59-((aTiempo/1000)%60));
- }
- lcd.print(".");
- lcd.print(millis()%1000);
- if(digitalRead(BT_RED)== HIGH)
- {
- lcd.clear();
- lcd.setCursor(0,0);
- lcd.print("ACTIVANDO BOMBA");
- lcd.setCursor(0,1);
- unsigned int porcentaje=0;
- unsigned long xTiempo=millis();
- while(digitalRead(BT_RED)== HIGH)
- {
- if(((millis()- xTiempo)%1000)>= 0 && (millis()- xTiempo)%1000 <= 20)
- {
- analogWrite(ledRojo, 255);
- tone(11,tonoAlarma1,200);
- }
- if(((millis()- xTiempo)%1000)>= 480 && (millis()- xTiempo)%1000 <= 500)
- {
- tone(11,tonoAlarma2,200);
- analogWrite(ledRojo,0);
- }
- unsigned long segundos=(millis()- xTiempo);
- porcentaje=(segundos*100)/(SEGUNDOSACTIVAR*1000);
- drawPorcent(porcentaje);
- if(porcentaje >= 100)
- {
- juegoBomba();
- }
- }
- lcd.clear();
- analogWrite(ledRojo, 0);
- }
- }
- }
- void juegoBomba(){
- lcd.clear();
- lcd.setCursor(0,0);
- lcd.print(" DETONACION EN");
- delay(1000);
- int minutos=MINUTOSBOMBA-1;
- unsigned long iTiempo=millis();
- unsigned long aTiempo;
- int largoTono = 50;
- while(1){
- if(((millis()- iTiempo)%1000)>= 0 && (millis()- iTiempo)%1000 <= 20)
- {
- analogWrite(ledRojo, 255);
- tone(11,tonoActivada,largoTono);
- }
- if(((millis()- iTiempo)%1000)>= 190 && (millis()- iTiempo)%1000 <= 200){analogWrite(ledRojo,0);}
- if(((millis()- iTiempo)%1000)>= 245 && (millis()- iTiempo)%1000 <= 255 && minutos-aTiempo/60000<2)tone(11,tonoActivada,largoTono);
- if(((millis()- iTiempo)%1000)>= 495 && (millis()- iTiempo)%1000 <= 510 && minutos-aTiempo/60000<4)tone(11,tonoActivada,largoTono);
- if(((millis()- iTiempo)%1000)>= 745 && (millis()- iTiempo)%1000 <= 760 && minutos-aTiempo/60000<2)tone(11,tonoActivada,largoTono);
- if( minutos-aTiempo/60000==0 && 59-((aTiempo/1000)%60) < 10)largoTono = 200;
- lcd.setCursor(0,0);
- lcd.print(" DETONACION EN ");
- aTiempo=millis()- iTiempo;
- lcd.setCursor(3,1);
- if(minutos-aTiempo/60000==0 && 59-((aTiempo/1000)%60)==0)
- {
- lcd.clear();
- while(1){
- lcd.setCursor(0,0);
- lcd.print("LOS TERRORISTAS");
- lcd.setCursor(0,1);
- lcd.print("GANAN LA PARTIDA");
- for(int i = 200; i>0; i--)
- {
- tone(11,i);
- delay(20);
- }
- noTone(11);
- delay(5000);
- lcd.clear();
- menuPrincipal();
- }
- }
- if((minutos-aTiempo/60000)<10)
- {
- lcd.print("0");
- lcd.print(minutos-aTiempo/60000);
- }
- else
- {
- lcd.print(minutos-aTiempo/60000);
- }
- lcd.print(":");
- if((59-((aTiempo/1000)%60))<10)
- {
- lcd.print("0");
- lcd.print(59-((aTiempo/1000)%60));
- }
- else
- {
- lcd.print(59-((aTiempo/1000)%60));
- }
- lcd.print(".");
- lcd.print(millis()%1000);
- if(digitalRead(BT_RED)== HIGH)
- {
- lcd.clear();
- analogWrite(ledRojo, 0);
- lcd.setCursor(0,0);
- lcd.print("Desactivando...");
- lcd.setCursor(0,1);
- unsigned int porcentaje=0;
- unsigned long xTiempo=millis();
- while(digitalRead(BT_RED)== HIGH)
- {
- if(((millis()- xTiempo)%1000)>= 0 && (millis()- xTiempo)%1000 <= 20)
- {
- analogWrite(ledVerde, 255);
- tone(11,tonoAlarma1,200);
- }
- if(((millis()- xTiempo)%1000)>= 480 && (millis()- xTiempo)%1000 <= 500)
- {
- tone(11,tonoAlarma2,200);
- analogWrite(ledVerde,0);
- }
- unsigned long segundos=(millis()- xTiempo);
- porcentaje=(segundos*100)/(SEGUNDOSACTIVAR*1000);
- drawPorcent(porcentaje);
- if(porcentaje >= 100)
- {
- lcd.clear();
- while(1){
- lcd.setCursor(0,0);
- lcd.print("BOMBA DESACTIVADA");
- lcd.setCursor(0,1);
- lcd.print("AT GANA PARTIDA");
- analogWrite(ledVerde, 255);
- delay(10000);
- menuPrincipal();
- }
- }
- }
- lcd.clear();
- analogWrite(ledRojo, 0);
- }
- }
- }
- void drawPorcent(int porcent){
- int i=1;
- int aDibujar=(80*porcent)/100;
- lcd.setCursor(0,1);
- while(aDibujar>=5){
- if(aDibujar>=5)
- {
- lcd.write(4);
- aDibujar-=5;
- }
- if(aDibujar<5)
- {
- switch(aDibujar){
- case 0:
- break;
- case 1:
- lcd.write(0);
- break;
- case 2:
- lcd.write(1);
- break;
- case 3:
- lcd.write(2);
- break;
- case 4:
- lcd.write(3);
- break;
- }
- }
- }
- }
- void configJuegoRapido(){
- lcd.clear();
- lcd.setCursor(0,0);
- lcd.print("Tiempo Juego :");
- lcd.setCursor(0,1);
- delay(800);
- while(digitalRead(BT_RED)== LOW){
- lcd.setCursor(0,1);
- lcd.print(MINUTOSJUEGO);
- lcd.print(" minutos");
- if(digitalRead(BT_LEFT)== HIGH && MINUTOSJUEGO>1){
- tone(11,2400,30);
- MINUTOSJUEGO--;
- delay(300);
- }
- if(digitalRead(BT_RIGHT)== HIGH && MINUTOSJUEGO<180){
- tone(11,2400,30);
- MINUTOSJUEGO++;
- delay(300);
- }
- }
- tone(11,2400,30);
- lcd.clear();
- lcd.setCursor(0,0);
- lcd.print("Tiempo Bomba :");
- lcd.setCursor(0,1);
- delay(800);
- while(digitalRead(BT_RED)== LOW){
- lcd.setCursor(0,1);
- lcd.print(MINUTOSBOMBA);
- lcd.print(" minutos");
- if(digitalRead(BT_LEFT)== HIGH && MINUTOSBOMBA>1){
- tone(11,2400,30);
- MINUTOSBOMBA--;
- delay(300);
- }
- if(digitalRead(BT_RIGHT)== HIGH && MINUTOSBOMBA<20){
- tone(11,2400,30);
- MINUTOSBOMBA++;
- delay(300);
- }
- }
- tone(11,2400,30);
- lcd.clear();
- lcd.setCursor(0,0);
- lcd.print("Tiempo Activar :");
- lcd.setCursor(0,1);
- delay(800);
- while(digitalRead(BT_RED)== LOW){
- lcd.setCursor(0,1);
- lcd.print(SEGUNDOSACTIVAR);
- lcd.print(" segundos");
- if(digitalRead(BT_LEFT)== HIGH && SEGUNDOSACTIVAR>5){
- tone(11,2400,30);
- SEGUNDOSACTIVAR--;
- delay(300);
- }
- if(digitalRead(BT_RIGHT)== HIGH && SEGUNDOSACTIVAR<30){
- SEGUNDOSACTIVAR++;
- tone(11,2400,30);
- delay(300);
- }
- }
- tone(11,2400,30);
- lcd.clear();
- game();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement