Here the full program, in case 1 is the part i mean
#include <Wire.h>
#include <Keypad.h>
#include <LiquidCrystal_I2C.h>
//#include <LiquidCrystal.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
//LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
const byte FILA = 4; //numero de filas del teclado
const byte COLS = 3; //numero de columnas del teclado
//el keymap define la correspondencia de la tecla pulsada con la tecla mostrada en el teclado físicamente
char keys[FILA][COLS] =
{
{'1', '2', '3'},
{'4', '5', '6'},
{'7', '8', '9'},
{'*', '0', '#'}
};
//Pines correspondientes de las filas y columnas
byte filaPines[FILA] = {9, 8, 7, 6}; //Filas 0 a 3
byte colPines[COLS] = {5, 4, 3}; //Columnas 0 a 3
//crea una instancia de keymap
Keypad teclado = Keypad( makeKeymap(keys), filaPines, colPines, FILA, COLS );
//Entradas/salidas
const byte interruptor = 2;
const byte ledRojo = 13;
const byte ledVerde = 5;
const byte ledAzul = 6;
//Variables
bool activar = false;
const String asterisco = "*******";
String claveintro = "xxxxxxx";
const String clavedefecto = "7355608";
byte indiceTeclado = 0;
const byte tiempoEx = 45; //Tiempo en segundos
byte countdownTime = tiempoEx;
byte estadoBomba = 0;
byte coincide = 0;
char tecla = 0;
unsigned long anteriorMillis = 0;
unsigned long timeCalc = 0;
unsigned long timeCalcVar = 0;
const byte origiCursor = 15;
byte lcdCursor = origiCursor;
void setup() {
Serial.begin(9600);
pinMode(activar, INPUT);
pinMode(ledRojo, OUTPUT);
pinMode(ledVerde, OUTPUT);
pinMode(ledAzul, OUTPUT);
// cls();
}
void loop() {
if (digitalRead(interruptor) == HIGH) {
activar = true;
Serial.println("PLANTING");
}
if (activar) {
switch (estadoBomba) {
case 0: // introducir clave
for (int j = 15; j >= 8; j--) {
lcd.setCursor(j, 0);
lcd.print(asterisco);
}
tecla = teclado.getKey();
if (tecla != NO_KEY) {
claveintro[indiceTeclado] = tecla;
lcd.setCursor(lcdCursor, 0);
lcd.print(claveintro);
indiceTeclado++;
lcdCursor--;
Serial.print(tecla);
Serial.println(" ");
Serial.print("Clave introducida: ");
Serial.println(claveintro);
Serial.print("Indice teclado: ");
Serial.println(indiceTeclado);
for (int i = 0; i < 7 && indiceTeclado == 7; i++) {
if (claveintro[i] == clavedefecto[i]) {
coincide++;
Serial.print("Coincide ");
Serial.println(coincide);
Serial.println(i);
}
while (i == 6) {
if (coincide == 7) {
coincide = 0;
indiceTeclado = 0;
estadoBomba = 1;
lcdCursor = origiCursor;
break;
}
else {
indiceTeclado = 0;
coincide = 0;
lcdCursor = origiCursor;
Serial.println("Clave erronea");
break;
}
}
}
}
break;
case 1: // cuentra atrás con desactivación
Serial.println("Cuenta atras");
anteriorMillis = millis();
for (int j = 15; j >= 8; j--) {
lcd.setCursor(j, 0);
lcd.print(asterisco);
}
while (countdownTime != 0 && estadoBomba == 1) {
timeCalc = millis() - anteriorMillis;
if (timeCalc >= 1000) {
countdownTime--;
anteriorMillis = millis();
Serial.print("Time remaining: ");
Serial.println(countdownTime);
if (countdownTime >= 10) {
lcd.setCursor(14, 1);
lcd.print(countdownTime);
}
else {
lcd.setCursor(14, 1);
lcd.print("0");
lcd.setCursor(15, 1);
lcd.print(countdownTime);
}
}
int progre = map(countdownTime, 45, 0, 1000, 0);
timeCalcVar = timeCalc % progre;
if (timeCalc >= progre && timeCalcVar <= 100) {
digitalWrite(ledRojo, HIGH);
Serial.println(progre);
Serial.println(timeCalcVar);
}
else if(timeCalc <= progre)
{
digitalWrite(ledRojo, LOW);
}
tecla = teclado.getKey();
if (tecla != NO_KEY) {
claveintro[indiceTeclado] = tecla;
lcd.setCursor(lcdCursor, 0);
lcd.print(claveintro);
indiceTeclado++;
lcdCursor--;
Serial.print(tecla);
Serial.println(" ");
Serial.print("Clave introducida: ");
Serial.println(claveintro);
Serial.print("Indice teclado: ");
Serial.println(indiceTeclado);
for (int i = 0; i < 7 && indiceTeclado == 7; i++) {
if (claveintro[i] == clavedefecto[i]) {
coincide++;
Serial.print("Coincide ");
Serial.println(coincide);
Serial.println(i);
}
while (i == 6) {
if (coincide == 7) {
coincide = 0;
indiceTeclado = 0;
estadoBomba = 2;
lcdCursor = origiCursor;
break;
}
else {
indiceTeclado = 0;
coincide = 0;
Serial.println("Clave erronea");
lcdCursor = origiCursor;
break;
}
}
}
}
}
if (countdownTime == 0) estadoBomba = 3; //explota
break;
case 2: // Desactivación
Serial.println("Bomb has been defused");
for (int i = 0; i <= 20; i++) {
digitalWrite(ledRojo, HIGH);
delay(50);
digitalWrite(ledRojo, LOW);
delay(50);
}
countdownTime = tiempoEx;
estadoBomba = 0;
break;
case 3: // Explota
Serial.println("Bomb exploded");
digitalWrite(ledRojo, HIGH);
delay(2000);
digitalWrite(ledRojo, LOW);
countdownTime = tiempoEx;
estadoBomba = 0;
break;
}
}
}