Timer program

Sorry that is the wrong code here is the correct one ,I have to still delete the old ones.

/*Airsoft TIMER
 Version 1.5
 Creators:
 Chase Cooley
 Joey Meyer
 Turned into usable code, 6/16/2011:
 Matt Falcon*/

//#define DEBUG
//#include "DebugUtils.h" 
#include <Keypad.h>
#include <LiquidCrystal.h>
#define pound 14
#define LED_RED 6
#define LED_GREEN 5
#define KP_ROWS 3
#define KP_COLS 4




unsigned int timerSeconds = 300; // start with 5 minutes on the clock
byte password[4];
byte entered[4];
int currentLength = 0;
byte i = 0;

LiquidCrystal lcd(8,7, 10, 11, 12, 13);


//Keypad
char keys[KP_ROWS][KP_COLS] = { 
  { 
    '1', '2', '3', '4'     }
  , { 
    '5', '6', '7', '8'     }
  , {
    '*', '9', '0', '#'     } 
};
byte rowPins[KP_ROWS] = {
  2,14,15}; //connect to the row pinouts of the keypad 
byte colPins[KP_COLS] = { 
  19,18,17,16 }; //connect to the column pinouts of the keypad
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, KP_ROWS, KP_COLS);

char key;

//LCD setup
void setup() {
  Serial.begin(9600);
  pinMode(LED_RED, OUTPUT); // sets the digital pin as output
  pinMode(LED_GREEN, OUTPUT); // sets the digital pin as output
  lcd.begin(16, 2);
  lcd.print("Enter Code: ");
  lcd.cursor();
  lcd.setCursor(6, 1);
  while (currentLength < 4) {
    key = keypad.getKey();
    if (key != NO_KEY) {
      lcd.print(key);
      password[currentLength] = key;
      currentLength++;
      lcd.setCursor(currentLength + 6, 1);
    } 
    else delay(10); 
  }
  lcd.noCursor();
  lcd.clear();
  lcd.print("You've Entered: ");
  lcd.setCursor(6, 1);
  lcd.print(password[0]);
  lcd.print(password[1]);
  lcd.print(password[2]);
  lcd.print(password[3]);
  delay(2500);
  lcd.clear();
  currentLength = 0;
}

void loop() {
  lcd.clear();
  lcd.print("Enter Code: ");
  lcd.cursor();
  key = keypad.getKey(); // get the key once per this loop
  if (key != NO_KEY) {
    lcd.setCursor(0, 1);
    lcd.print("           ");
    lcd.setCursor(6, 1);
    while (currentLength < 4) {
      // here, we take the key that broke us into this "if" statement, instead of discarding it. this also pauses the timer, effectively.
      if (key != NO_KEY) 
      { // redundant for the first loop, but necessary for every next character
        lcd.setCursor(currentLength + 5, 1);
        lcd.print(key);
        entered[currentLength] = key;
        currentLength++;
      } 
      else delay(10); 
      key = keypad.getKey(); // get the key every time "while" loops
    }
    if (memcmp(entered,password,4) == 0) { // shortcut to compare an array of bytes, use memcmp(A, B, length), will return 0 if match.
      lcd.noCursor();
      lcd.clear();
      lcd.print(" Defused ");
      tone(9,1200, 4000); // 
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Bomb Rebooting");
      lcd.setCursor(0,1 );
      lcd.print("Have a nice day!");
      currentLength = 0;
      delay(4000); // hold that on screen for 2.5 seconds
      lcd.clear();
      currentLength = 0;
      setup();
    } 
    else {
      lcd.noCursor();
      lcd.clear();
      lcd.print(" Wrong ");
      tone(9,110, 2500);  
      lcd.setCursor(0, 1);
      lcd.print("Penalty -2:00"); // Display time penalty
      if (timerSeconds > 120) timerSeconds -= 120;
      else timerSeconds = 1; // will trigger BOOM next cycle
      currentLength = 0;
      delay(2500); // hold that on screen for 2.5 seconds
      lcd.clear();
    }
  }
  timer(); // prints current time on screen, checks for "go off" time, holds loop for 1 second
}

void timer() {
  lcd.setCursor(0, 1); // sets cursor to 2nd line
  lcd.print("Timer: ");
  lcd.print(timerSeconds / 60); // integer number of minutes on clock
  lcd.print(":");
  lcd.print(timerSeconds % 60); // mod 60; gives us number of seconds outside of 60sec/min
  delay(950); // hold us here for 0.950 seconds
  {
    digitalWrite(LED_RED,!digitalRead(LED_RED)); // toggle the green LED once a second
  }
  tone(9,800, 250); // play bleep for 50ms
  delay(50); // and there's the rest of that 1 second (not counting LCD delay)

  timerSeconds--;
  if (timerSeconds == 0) bombomb();
}
void bombomb() {
  // routine for making ze BOMB GOEZ OFF!!!1 :D
  lcd.noCursor();
  lcd.clear();
  lcd.print(" !BoOo0o0o0om! ");
  lcd.setCursor(0, 1);
  lcd.print("you LoSe Sucker!");
  tone(9,110, 100);
  digitalWrite(LED_RED, HIGH); // sets the red LED on
  delay(500); // waits half a second
  tone(9,110, 100);
  delay(500); // waits half a second
  digitalWrite(LED_RED, LOW); // sets the red LED off
  digitalWrite(LED_GREEN, HIGH); // sets the green LED on
  tone(9,110, 100);
  delay(500); // waits half a second
  digitalWrite(LED_RED, HIGH); // sets the red LED on
  digitalWrite(LED_GREEN, LOW); // sets the green LED off
  tone(9,110, 100);
  delay(500); // waits half a second
  digitalWrite(LED_RED, LOW); // sets the red LED off
  digitalWrite(LED_GREEN, HIGH); // sets the green LED on
  tone(9,110, 100);
  delay(500); // waits half a second

  key = NO_KEY; // enter the while() loop, otherwise it'll skip. i could use do { } while();, but I'm lazy.
  {	
    while (key == NO_KEY) {
      key = keypad.getKey();
      if (key == '#') 
      {
        lcd.clear();
        lcd.print("Resetting:");
        lcd.setCursor(6,1);
        lcd.print("the Bomb!");
        delay(3000); //  3 sec delay
        void (*softReset) (void) = 0; //declare reset function @ address 0
        softReset();
        //timerSeconds = 300; // put 5 minutes on the clock
        // and we break the loop and go back to timer.
      } 
      else  key = NO_KEY; // continue looking for pound key
    }
  }
}

:slight_smile: