Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <LiquidCrystal.h>;
- //
- int adc_key_val[5] ={30, 150, 360, 535, 760 };
- int NUM_KEYS = 5;
- int adc_key_in;
- int key=-1;
- int oldkey=-1;
- //Buttons for lcd shield
- int BT_RIGHT = 0;
- int BT_UP = 1;
- int BT_DOWN = 2;
- int BT_LEFT = 3;
- int BT_RED = 4; // Ok key
- int BT_DEFUSER = 40; // not implemented
- //leds
- const int ledVerde = 3; // para el shield lcd
- const int ledRojo = 2 ;
- const int ledDefuser = 2;
- //
- //LSD
- LiquidCrystal lcd( 8, 9, 4, 5, 6, 7);
- //TIME INTS
- int MINUTOSJUEGO = 45;
- int MINUTOSBOMBA = 4;
- int SEGUNDOSACTIVAR = 10;
- // SOUND TONES
- int tonepin = 13; // si no tiene sonido, el led 13 funcionará
- int tonoPitido = 3000;
- int tonoAlarma1 = 700;
- int tonoAlarma2 = 2600;
- int tonoActivada = 1330;
- void setup(){
- lcd.begin(16, 2);
- lcd.setCursor(4,0);
- lcd.print("MANIACS");
- lcd.setCursor(1,1);
- lcd.print("TACTICAL UNIT");
- delay(2000);
- // 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[]={
- "Custom Game","Quick Game", "Config" }; // HERE YOU CAN ADD MORE ITEMS ON THE MAIN MENU
- lcd.print(menu1[i]);
- while(1){
- if(BT_UP == get_key() && i>0){
- tone(tonepin,2400,30);
- i--;
- lcd.clear();
- lcd.print(menu1[i]);
- delay(500);
- }
- if(BT_DOWN == get_key() && i<2){
- tone(tonepin,2400,30);
- i++;
- lcd.clear();
- lcd.print(menu1[i]);
- delay(500);
- }
- if(BT_RED == get_key()){
- tone(tonepin,2400,30);
- lcd.clear();
- switch (i){
- case 0:
- configJuegoRapido();
- break;
- case 1:
- configJuegoRapido();
- break;
- case 2:
- config();
- break;
- }
- }
- }
- }
- void juegoCustom(){
- game();
- }
- void config(){
- // need to implement a read and write config function... to terminate this option
- lcd.setCursor(0,0);
- lcd.print("config menu test");
- delay(3000);
- menuPrincipal();
- }
- void game(){
- delay(500);
- while(!isPressed(BT_RED)){
- lcd.clear();
- lcd.setCursor(0,0);
- lcd.print("Ready");
- lcd.setCursor(0,1);
- lcd.print("to begin");
- delay(1000);
- lcd.clear();
- lcd.setCursor(0,0);
- lcd.print("Push RED button");
- lcd.setCursor(0,1);
- lcd.print("to Start");
- delay(1000);
- }
- lcd.clear();
- lcd.setCursor(0,0);
- lcd.print("Starting Game");
- lcd.setCursor(0,1);
- tone(tonepin,2000,100);
- lcd.print(" IN 5 ");
- delay(1000);
- lcd.clear();
- lcd.setCursor(0,0);
- lcd.print("Starting Game");
- lcd.setCursor(0,1);
- tone(tonepin,2000,100);
- lcd.print(" IN 4 ");
- delay(1000);
- lcd.clear();
- lcd.setCursor(0,0);
- lcd.print("Starting Game");
- lcd.setCursor(0,1);
- tone(tonepin,2000,100);
- lcd.print(" IN 3 ");
- delay(1000);
- lcd.clear();
- lcd.setCursor(0,0);
- lcd.print("Starting Game");
- lcd.setCursor(0,1);
- tone(tonepin,2000,100);
- lcd.print(" IN 2 ");
- delay(1000);
- lcd.clear();
- lcd.setCursor(0,0);
- lcd.print("Starting Game");
- lcd.setCursor(3,1);
- tone(tonepin,2000,100);
- lcd.print(MINUTOSJUEGO);
- lcd.print(":00:000");
- delay(1000);
- lcd.clear();
- lcd.setCursor(3,0);
- lcd.print("GAME TIME");
- 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(3,0);
- lcd.print("GAME TIME");
- 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(" GAME OVER! ");
- lcd.setCursor(0,1);
- lcd.print(" DEFENDERS WIN ");
- for(int i = 1000; i>200; i--){
- tone(tonepin,i);
- delay(5);
- }
- noTone(tonepin);
- 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(isPressed(BT_RED))
- {
- lcd.clear();
- lcd.setCursor(0,0);
- lcd.print("ARMING");
- lcd.setCursor(0,1);
- unsigned int porcentaje=0;
- unsigned long xTiempo=millis();
- while(isPressed(BT_RED))
- {
- if(((millis()- xTiempo)%1000)>= 0 && (millis()- xTiempo)%1000 <= 20)
- {
- analogWrite(ledRojo, 255);
- tone(tonepin,tonoAlarma1,200);
- }
- if(((millis()- xTiempo)%1000)>= 480 && (millis()- xTiempo)%1000 <= 500)
- {
- tone(tonepin,tonoAlarma2,200);
- analogWrite(ledRojo,0);
- }
- unsigned long segundos=(millis()- xTiempo);
- porcentaje=(segundos*100)/(SEGUNDOSACTIVAR*1000);
- drawPorcent(porcentaje);
- if(porcentaje >= 100)
- {
- lcd.clear();
- /*lcd.setCursor(0,0);
- lcd.print("ACTIVATED");
- delay(2000); */
- juegoBomba();
- }
- }
- lcd.clear();
- analogWrite(ledRojo, 0);
- }
- }
- }
- void juegoBomba(){
- lcd.clear();
- lcd.setCursor(0,0);
- lcd.print(" ARMED ");
- 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(tonepin,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(tonepin,tonoActivada,largoTono);
- if(((millis()- iTiempo)%1000)>= 495 && (millis()- iTiempo)%1000 <= 510 && minutos-aTiempo/60000<4)tone(tonepin,tonoActivada,largoTono);
- if(((millis()- iTiempo)%1000)>= 745 && (millis()- iTiempo)%1000 <= 760 && minutos-aTiempo/60000<2)tone(tonepin,tonoActivada,largoTono);
- if( minutos-aTiempo/60000==0 && 59-((aTiempo/1000)%60) < 10)largoTono = 200;
- lcd.setCursor(0,0);
- lcd.print(" DETONATION IN ");
- 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("TERRORISTS WIN");
- lcd.setCursor(0,1);
- lcd.print("GAME OVER");
- for(int i = 200; i>0; i--)
- {
- tone(tonepin,i);
- delay(20);
- }
- noTone(tonepin);
- 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(isPressed(BT_RED))
- {
- lcd.clear();
- analogWrite(ledRojo, 0);
- lcd.setCursor(0,0);
- lcd.print("DISARMING");
- lcd.setCursor(0,1);
- unsigned int porcentaje=0;
- unsigned long xTiempo=millis();
- while(isPressed(BT_RED))
- {
- if(((millis()- xTiempo)%1000)>= 0 && (millis()- xTiempo)%1000 <= 20)
- {
- analogWrite(ledVerde, 255);
- tone(tonepin,tonoAlarma1,200);
- }
- if(((millis()- xTiempo)%1000)>= 480 && (millis()- xTiempo)%1000 <= 500)
- {
- tone(tonepin,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("BOMB DISARMED");
- /*lcd.setCursor(0,1);
- lcd.print("AT GANA PARTIDA");*/
- analogWrite(ledVerde, 255);
- delay(2000);
- //menuPrincipal();
- return;
- }
- }
- }
- 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("Game Time :");
- lcd.setCursor(0,1);
- delay(800);
- while(!isPressed(BT_RED)){
- lcd.setCursor(0,1);
- lcd.print(MINUTOSJUEGO);
- lcd.print(" minutes");
- if(isPressed(BT_LEFT) && MINUTOSJUEGO>1){
- tone(tonepin,2400,30);
- MINUTOSJUEGO--;
- delay(300);
- }
- if(isPressed(BT_RIGHT) && MINUTOSJUEGO<180){
- tone(tonepin,2400,30);
- MINUTOSJUEGO++;
- delay(300);
- }
- }
- tone(tonepin,2400,30);
- lcd.clear();
- lcd.setCursor(0,0);
- lcd.print("Bomb Timer :");
- lcd.setCursor(0,1);
- delay(800);
- while(!isPressed(BT_RED)){
- lcd.setCursor(0,1);
- lcd.print(MINUTOSBOMBA);
- lcd.print(" minutes");
- if(isPressed(BT_LEFT) && MINUTOSBOMBA>1){
- tone(tonepin,2400,30);
- MINUTOSBOMBA--;
- delay(300);
- }
- if(isPressed(BT_RIGHT) && MINUTOSBOMBA<20){
- tone(tonepin,2400,30);
- MINUTOSBOMBA++;
- delay(300);
- }
- }
- tone(tonepin,2400,30);
- lcd.clear();
- lcd.setCursor(0,0);
- lcd.print("Activation time:");
- lcd.setCursor(0,1);
- delay(800);
- while(!isPressed(BT_RED)){
- lcd.setCursor(0,1);
- lcd.print(SEGUNDOSACTIVAR);
- lcd.print(" seconds");
- if(isPressed(BT_LEFT) && SEGUNDOSACTIVAR>5){
- tone(tonepin,2400,30);
- SEGUNDOSACTIVAR--;
- delay(300);
- }
- if(isPressed(BT_RIGHT) && SEGUNDOSACTIVAR<30){
- SEGUNDOSACTIVAR++;
- tone(tonepin,2400,30);
- delay(300);
- }
- }
- tone(tonepin,2400,30);
- lcd.clear();
- game();
- }
- //Get Key
- boolean isPressed( int button) {
- if( get_key() == button ) return true;
- return false;
- }
- // Convert ADC value to key number
- int get_key()
- {
- int input = analogRead(0);
- int k;
- for (k = 0; k < NUM_KEYS; k++)
- {
- if (input < adc_key_val[k])
- {
- return k;
- }
- }
- if (k >= NUM_KEYS)
- k = -1; // No valid key pressed
- return k;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement