Ola, alguem pode me ajudar com o codigo abaixo. (codigo de um jogo para airsoft)
Inicialmente o codigo pede apenas para inserir uma senha e sosinho coloca um tempo fixo predefinido para inicio do jogo. preciso colocar para digitar o tempo tambem. estou apanhando. (usando teclado 4x4 e lcd 16x2 e arduino uno)
#include <Keypad.h>
#include <Key.h>
#include <LiquidCrystal.h>
#include <Tone.h>
#define pound 14
Tone tone1;
int Scount = 12; // count seconds
int Mcount = 1; // count minutes
int Hcount = 0; // count hours
int DefuseTimer = 0; // set timer to 0
long secMillis = 0; // store last time for second add
long interval = 1000; // interval for seconds
char password[4]; // number of characters in our password
int currentLength = 0; //defines which number we are currently writing
int i = 0;
char entered[4];
int ledPin = 4; //red led
int ledPin2 = 3; //yellow led
int ledPin3 = 2; //green led
int pinRel6 = 6; // rele sirene
LiquidCrystal lcd(7, 8, 10, 11, 12, 13); // the pins we use on the LCD
const byte ROWS = 4; // 4 linha
const byte COLS = 4; // 4 colunas
char keys[ROWS][COLS] = {
{‘1’, ‘2’, ‘3’, ‘A’},
{‘4’, ‘5’, ‘6’, ‘B’},
{‘7’, ‘8’, ‘9’, ‘C’},
{’*’, ‘0’, ‘#’, ‘D’}
};
byte rowPins[ROWS] = {A0, A1, A2, A3}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {A4, A5, 6, 5}; //connect to the column pinouts of the keypad
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
void setup() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Digite o Tempo: ");
while (currentLength < 5)
{
lcd.setCursor(currentLength + 6, 1);
lcd.cursor();
char tmp = keypad.getKey();
tmp == NO_KEY;
if (tmp != NO_KEY)
{
if ((tmp != ‘*’) && (tmp != ‘#’))
{
lcd.print(tmp);
password[currentLength] = tmp;
currentLength++;
tone1.play(NOTE_C6, 200);
}
}
}
lcd.clear();
pinMode(ledPin, OUTPUT); // sets the digital pin as output
pinMode(ledPin2, OUTPUT); // sets the digital pin as output
pinMode(ledPin3, OUTPUT); // sets the digital pin as output
tone1.begin(9);
lcd.begin(16, 2);
Serial.begin(9600);
tone1.play(NOTE_E6, 200);
delay(150);
tone1.play(NOTE_B6, 200);
delay(150);
tone1.play(NOTE_C6, 200);
delay(150);
tone1.play(NOTE_F6, 200);
delay(150);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Digite a Senha: ");
delay(300);
while (currentLength < 4)
{
lcd.setCursor(currentLength + 6, 1);
lcd.cursor();
char key = keypad.getKey();
key == NO_KEY;
if (key != NO_KEY)
{
if ((key != ‘*’) && (key != ‘#’))
{
lcd.print(key);
password[currentLength] = key;
currentLength++;
tone1.play(NOTE_C6, 200);
}
}
}
if (currentLength == 4)
{
delay(500);
lcd.noCursor();
lcd.clear();
lcd.home();
lcd.print("Digitou a Senha: ");
lcd.setCursor(6, 1);
lcd.print(password[0]);
lcd.print(password[1]);
lcd.print(password[2]);
lcd.print(password[3]);
tone1.play(NOTE_E6, 200);
delay(3000);
lcd.clear();
currentLength = 0;
}
}
void loop()
{
timer();
char key2 = keypad.getKey(); // get the key
if (key2 == ‘*’)
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Senha: ");
while (currentLength < 4)
{
timer();
char key2 = keypad.getKey();
if (key2 == '#')
{
currentLength = 0;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Senha: ");
}
else if (key2 != NO_KEY)
{
lcd.setCursor(currentLength + 7, 0);
lcd.cursor();
lcd.print(key2);
entered[currentLength] = key2;
currentLength++;
tone1.play(NOTE_C6, 200);
delay(100);
lcd.noCursor();
lcd.setCursor(currentLength + 6, 0);
lcd.print("*");
lcd.setCursor(currentLength + 7, 0);
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("Bomba Desarmada ");
currentLength = 0;
digitalWrite(ledPin3, HIGH);
delay(2500);
lcd.setCursor(0, 1);
lcd.print("Reset da Bomba ");
delay(10000);
}
else
{
lcd.noCursor();
lcd.clear();
lcd.home();
lcd.print(" Senha Errada ");
if (Hcount > 0)
{
Hcount = Hcount - 1;
}
if (Mcount > 0)
{
Mcount = Mcount - 59;
}
if (Scount > 0)
{
Scount = Scount - 59;
}
delay(1500);
currentLength = 0;
}
}
}
}
void timer()
{
Serial.print(Scount);
Serial.println();
if (Hcount <= 0)
{
if ( Mcount < 0 )
{
lcd.noCursor();
lcd.clear();
lcd.home();
lcd.print("… A Bomba… “);
lcd.setCursor (0, 1);
lcd.print(”… Explodiu… ");
pinMode(pinRel6, OUTPUT); // ativa sirene
digitalWrite(pinRel6, HIGH);
delay(2000);
while (Mcount < 0)
{
digitalWrite(ledPin, HIGH); // sets the LED on
tone1.play(NOTE_A2, 90);
delay(100);
digitalWrite(ledPin, LOW); // sets the LED off
tone1.play(NOTE_A2, 90);
delay(100);
digitalWrite(ledPin2, HIGH); // sets the LED on
tone1.play(NOTE_A2, 90);
delay(100);
digitalWrite(ledPin2, LOW); // sets the LED off
tone1.play(NOTE_A2, 90);
delay(100);
digitalWrite(ledPin3, HIGH); // sets the LED on
tone1.play(NOTE_A2, 90);
delay(100);
digitalWrite(ledPin3, LOW); // sets the LED off
tone1.play(NOTE_A2, 90);
delay(100);
}
}
}
lcd.setCursor (0, 1); // sets cursor to 2nd line
lcd.print ("Tempo: ");
if (Hcount >= 10)
{
lcd.setCursor (7, 1);
lcd.print (Hcount);
}
if (Hcount < 10)
{
lcd.setCursor (7, 1);
lcd.write (“0”);
lcd.setCursor (8, 1);
lcd.print (Hcount);
}
lcd.print (":");
if (Mcount >= 10)
{
lcd.setCursor (10, 1);
lcd.print (Mcount);
}
if (Mcount < 10)
{
lcd.setCursor (10, 1);
lcd.write (“0”);
lcd.setCursor (11, 1);
lcd.print (Mcount);
}
lcd.print (":");
if (Scount >= 10)
{
lcd.setCursor (13, 1);
lcd.print (Scount);
}
if (Scount < 10)
{
lcd.setCursor (13, 1);
lcd.write (“0”);
lcd.setCursor (14, 1);
lcd.print (Scount);
}
if (Hcount < 0)
{
Hcount = 0;
}
if (Mcount < 0)
{
Hcount --;
Mcount = 59;
}
if (Scount < 1) // if 60 do this operation
{
Mcount --; // add 1 to Mcount
Scount = 59; // reset Scount
}
if (Scount > 0) // do this oper. 59 times
{
unsigned long currentMillis = millis();
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
//lcd.clear();
}
}
}