Go Down

Topic: Timer program (Read 5 times) previous topic - next topic

soul1974

Jun 16, 2011, 09:20 am Last Edit: Jun 16, 2011, 01:58 pm by soul1974 Reason: 1
Hi,
I am very new to ARDUINO and programing and got this project from the inter net and I am having problems getting the program to reset once the correct code is imputed and once the time limit has been reach.

Can anyone please help? I have sent numorus emails to the creators but with no luck. I have fixed alot but seem to be at a dead end.

Code: [Select]
[font=Verdana][font=Verdana]

/*Airsoft TIMER
Version 1.1Creators:
Chase Cooley&&&&&&&&&&&&
Joey Meyer*/

#include <Keypad.h>
#include <LiquidCrystal.h>
#include <Tone.h>
#define pound 14

Tone tone1;
int Scount = 0; // count seconds
int Mcount = 0; // count minutes
int Hcount = 0; // count hours
int Dcount = 0; // count daysint val = 0;
long secMillis = 0; // store last time for second
long interval = 1000; // interval for seconds
char password[4];
int currentLength = 0;
int i = 0;char entered[4];
int ledPin = 5; //red light
int ledPin2 = 6; //green light

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

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

//LCD setup
void setup()
{
pinMode(ledPin, OUTPUT); // sets the digital pin as output
pinMode(ledPin2, OUTPUT); // sets the digital pin as output
tone1.begin(9);//pin for speaker
lcd.begin(16, 2);
Serial.begin(9600);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Enter Code: ");
while (currentLength < 4)
{
lcd.setCursor(currentLength + 6, 1);
lcd.cursor();
char key = keypad.getKey();
key == NO_KEY;
if (key != NO_KEY)
{
lcd.print(key);
password[currentLength] = key;
currentLength++;
delay(200);
}}
if (currentLength == 4)
{
lcd.noCursor();
lcd.clear();
lcd.home();
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()
{
char key2 = keypad.getKey(); // get the key
lcd.setCursor(0,0);
timer();
if (key2 != NO_KEY)
{
 while (key2 == NO_KEY)
{
 key2 = keypad.getKey();
}
if (key2 != NO_KEY)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Enter Code: ");
while (currentLength < 4)
{
lcd.setCursor(currentLength + 6, 1);
lcd.cursor();
char key2 = keypad.getKey();
if (key2 != NO_KEY)
{
lcd.print(key2);
entered[currentLength] = key2;
currentLength++;
delay(200);
lcd.noCursor();
lcd.setCursor(currentLength + 5, 1);
lcd.print("*");
lcd.setCursor(currentLength + 6, 1);
lcd.cursor();
}}
if (currentLength == 4)
{
if (entered[0] == password[0] && entered[1] == password[1] && entered[2] == password[2] && entered[3] == password[3])
{
lcd.noCursor();
lcd.clear();
lcd.home();
lcd.print(" Defused ");
currentLength = 0;
delay(2500);//sets the delay for defuse screen
lcd.setCursor(0,1);
lcd.print("Reset the Bomb");
}
else
{
lcd.noCursor();
lcd.clear();
lcd.home();
lcd.print(" Wrong ");
lcd.setCursor(0,1);
lcd.print(" Add - 0.30"); //LCD Display time added
if (Mcount < 5)
{
Mcount = Mcount + 0;
}
if (Scount < 59)
{
Scount = Scount + 30;
}
delay(1500);
currentLength = 0;
}
}}
}}

void timer()
{
if ( Mcount >= 5 )
while ( Mcount >= 5)
{
lcd.noCursor();lcd.clear();
lcd.home();
lcd.print(" !BoOo0o0o0om! ");
tone1.play(NOTE_A2, 200);
digitalWrite(ledPin, HIGH); // sets the LED on
tone1.play(NOTE_A2, 200);
delay(10); // waits for a second
digitalWrite(ledPin, LOW); // sets the LED off
tone1.play(NOTE_A2, 200);
delay(10); // waits for a second
digitalWrite(ledPin2, HIGH); // sets the LED on
tone1.play(NOTE_A2, 200);
delay(10); // waits for a second
digitalWrite(ledPin2, LOW); // sets the LED off
tone1.play(NOTE_A2, 200);
delay(10); // waits for a second
char key4 = keypad.getKey();
if (key4 != NO_KEY)
{
while (key4 == NO_KEY)
{
key4 = keypad.getKey();
}
if (key4 = '#')
{
lcd.clear();
lcd.print("Reset the Bomb");
}}
}
if ( Mcount == 60) // if Mcount is 60 do this operation
{
//delay (32); // good place to fine tune timing
Mcount = 0; // reset Mcount
Hcount ++;
}
if (Hcount> 23)
{
Dcount++;
Hcount = 0; // have to reset Hcount to "0" after 24hrs
}

lcd.setCursor (0,1); // sets cursor to 2nd line
lcd.print ("Timer: ");
lcd.print (Dcount);lcd.print (":");
lcd.print (Hcount);lcd.print (":");
lcd.print (Mcount);lcd.print (":");
lcd.print (Scount);
if (Scount >59) // if 60 do this operation
{
Mcount ++; // add 1 to Mcount
Scount = 0; // reset Scount
//delay (58); // changes ms per min
}
if (Scount < 60) // do this oper. 59 times
{
unsigned long currentMillis = millis();//delay (988); // changing by one = 60 ms a min
if(currentMillis - secMillis > interval)
{
tone1.play(NOTE_G5, 200);
secMillis = currentMillis;
Scount ++; // add 1 to Scount
digitalWrite(ledPin2, HIGH); // sets the LED on
delay(10); // waits for a second
digitalWrite(ledPin2, LOW); // sets the LED off
delay(10); // waits for a second
}
}}

[/font] [/font]

AWOL

#1
Jun 16, 2011, 09:23 am Last Edit: Jun 16, 2011, 09:37 am by AWOL Reason: 1
You've got some crazy indentation in that code.

Can you please go back to your post, click on "modify" (up on the right of your post), then highlight all the code, then click on a the "#" icon on the toolbar, then click "save".

Thanks.

What do you expect this code to do?
Code: [Select]
char key = keypad.getKey();
   key == NO_KEY;
   if (key != NO_KEY)


Strange construct:
Code: [Select]
  if (key2 != NO_KEY)
  {
    while (key2 == NO_KEY)
    {
      key2 = keypad.getKey();
    }
    if (key2 != NO_KEY)
"Pete, it's a fool looks for logic in the chambers of the human heart." Ulysses Everett McGill.
Do not send technical questions via personal messaging - they will be ignored.

Nick Gammon

Code: [Select]
void timer()
{
  if ( Mcount >= 5 )
    while ( Mcount >= 5)
    {


You hardly need the "if" because the "while" will only do something if Mcount >= 5.

soul1974

Hi,

Like I stated before that this is code that I got from Instructables not mine .

Please could you help me ? I was told this is the forum to ask for help . =(

FalconFour

Actually you said you got it from the "inter net" (?) and that you "fixed a lot of it" (??), so who knows what was "fixed" (but it sure wasn't the formatting!)...

I should be asleep right now but this topic just screamed out for someone to help it along with some formatting. Nothing irks me more than poorly formatted code. A quick trip through Eclipse's one and only useful function - "Format" - and we get some readable code...

Code: [Select]
/*Airsoft TIMER
Version 1.1Creators:
Chase Cooley&&&&&&&&&&&&
Joey Meyer*/

#include <Keypad.h>
#include <LiquidCrystal.h>
#include <Tone.h>
#define pound 14

Tone tone1;
int Scount = 0; // count seconds
int Mcount = 0; // count minutes
int Hcount = 0; // count hours
int Dcount = 0; // count daysint val = 0;
long secMillis = 0; // store last time for second
long interval = 1000; // interval for seconds
char password[4];
int currentLength = 0;
int i = 0;
char entered[4];
int ledPin = 5; //red light
int ledPin2 = 6; //green light

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

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

//LCD setup
void setup() {
pinMode(ledPin, OUTPUT); // sets the digital pin as output
pinMode(ledPin2, OUTPUT); // sets the digital pin as output
tone1.begin(9);//pin for speaker
lcd.begin(16, 2);
Serial.begin(9600);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Enter Code: ");
while (currentLength < 4) {
lcd.setCursor(currentLength + 6, 1);
lcd.cursor();
char key = keypad.getKey();
key == NO_KEY;
if (key != NO_KEY) {
lcd.print(key);
password[currentLength] = key;
currentLength++;
delay(200);
}
}
if (currentLength == 4) {
lcd.noCursor();
lcd.clear();
lcd.home();
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() {
char key2 = keypad.getKey(); // get the key
lcd.setCursor(0, 0);
timer();
if (key2 != NO_KEY) {
while (key2 == NO_KEY) {
key2 = keypad.getKey();
}
if (key2 != NO_KEY) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Enter Code: ");
while (currentLength < 4) {
lcd.setCursor(currentLength + 6, 1);
lcd.cursor();
char key2 = keypad.getKey();
if (key2 != NO_KEY) {
lcd.print(key2);
entered[currentLength] = key2;
currentLength++;
delay(200);
lcd.noCursor();
lcd.setCursor(currentLength + 5, 1);
lcd.print("*");
lcd.setCursor(currentLength + 6, 1);
lcd.cursor();
}
}
if (currentLength == 4) {
if (entered[0] == password[0] && entered[1] == password[1]
&& entered[2] == password[2] && entered[3]
== password[3]) {
lcd.noCursor();
lcd.clear();
lcd.home();
lcd.print(" Defused ");
currentLength = 0;
delay(2500);//sets the delay for defuse screen
lcd.setCursor(0, 1);
lcd.print("Reset the Bomb");
} else {
lcd.noCursor();
lcd.clear();
lcd.home();
lcd.print(" Wrong ");
lcd.setCursor(0, 1);
lcd.print(" Add - 0.30"); //LCD Display time added
if (Mcount < 5) {
Mcount = Mcount + 0;
}
if (Scount < 59) {
Scount = Scount + 30;
}
delay(1500);
currentLength = 0;
}
}
}
}
}

void timer() {
if (Mcount >= 5)
while (Mcount >= 5) {
lcd.noCursor();
lcd.clear();
lcd.home();
lcd.print(" !BoOo0o0o0om! ");
tone1.play(NOTE_A2, 200);
digitalWrite(ledPin, HIGH); // sets the LED on
tone1.play(NOTE_A2, 200);
delay(10); // waits for a second
digitalWrite(ledPin, LOW); // sets the LED off
tone1.play(NOTE_A2, 200);
delay(10); // waits for a second
digitalWrite(ledPin2, HIGH); // sets the LED on
tone1.play(NOTE_A2, 200);
delay(10); // waits for a second
digitalWrite(ledPin2, LOW); // sets the LED off
tone1.play(NOTE_A2, 200);
delay(10); // waits for a second
char key4 = keypad.getKey();
if (key4 != NO_KEY) {
while (key4 == NO_KEY) {
key4 = keypad.getKey();
}
if (key4 = '#') {
lcd.clear();
lcd.print("Reset the Bomb");
}
}
}
if (Mcount == 60) // if Mcount is 60 do this operation
{
//delay (32); // good place to fine tune timing
Mcount = 0; // reset Mcount
Hcount++;
}
if (Hcount > 23) {
Dcount++;
Hcount = 0; // have to reset Hcount to "0" after 24hrs
}

lcd.setCursor(0, 1); // sets cursor to 2nd line
lcd.print("Timer: ");
lcd.print(Dcount);
lcd.print(":");
lcd.print(Hcount);
lcd.print(":");
lcd.print(Mcount);
lcd.print(":");
lcd.print(Scount);
if (Scount > 59) // if 60 do this operation
{
Mcount++; // add 1 to Mcount
Scount = 0; // reset Scount
//delay (58); // changes ms per min
}
if (Scount < 60) // do this oper. 59 times
{
unsigned long currentMillis = millis();//delay (988); // changing by one = 60 ms a min
if (currentMillis - secMillis > interval) {
tone1.play(NOTE_G5, 200);
secMillis = currentMillis;
Scount++; // add 1 to Scount
digitalWrite(ledPin2, HIGH); // sets the LED on
delay(10); // waits for a second
digitalWrite(ledPin2, LOW); // sets the LED off
delay(10); // waits for a second
}
}
}


Have at, guys! There's a lot of work to do... especially "delay(10); // waits for a second" (you mean, waits 1/10th a second? haha).

Go Up