Programa - Bomba para prática de airsoft

Olá, estou começando agora a mexer com arduino, e estou fazendo uma bomba para usar em jogos de airsoft no meu time, terá 3 modos, e estou escrevendo o primeiro modo ainda onde você entra com uma senha e o tempo de jogo, o tempo começa a decrescer e quando uma pessoa for desarmar ela aperta um botão específico e entra com a senha, que se for a correta desarma e se for errado continua contando o tempo.

Agora vamos ao problema, nao estou conseguindo fazer a comparação da senha inserida após o inicio da contagem do tempo, o tempo para quando a pessoa entra no modo de desarme da bomba.

Aqui vai o código meu escrito até agora:

#include <Keypad.h>
#include <LiquidCrystal.h>

unsigned long controlMillis=0;

int t=0,c=0,reset=0,pot=2,tempo=1,segundos=0,detona=3,confirma=3;
char senha[4];
char confirmaSenha[4];
char cod1;
char cod2;
char cod3;
char cod4;
char cod5;
char vcod1;
char vcod2;
char vcod3;
char vcod4;
char vcod5;
char bt_confirma = '*';

byte pinosLinha[] = {A4,A5,8,9};
byte pinosColuna[] = {A0,A1,A2,A3};
char teclas[4][4] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};

Keypad teclado = Keypad(makeKeymap(teclas),pinosLinha,pinosColuna,4,4);

LiquidCrystal lcd(2,3,4,5,6,7);

void setup() {

lcd.cursor();

lcd.begin (16,2);

lcd.setCursor(1,0);
lcd.print("GOES - Time PB");
lcd.setCursor(0,1);
lcd.print("Bomba de Airsoft");
// delay (3000);
lcd.clear();

lcd.setCursor(1,0);
lcd.print ("Escolha o modo");
lcd.setCursor (4,1);
lcd.print ("de jogo");
// delay (3000);
lcd.clear();

lcd.print ("A-Bomba C-Down.");
lcd.setCursor (2,1);
lcd.print ("B-Dominacao");

}
void loop() {

menu();
}

void menu() {

char tecla_pressionada = teclado.waitForKey();

if (tecla_pressionada == 'A')
{
bomba();
}
if (tecla_pressionada == 'B')
{

dominacao();
}

if (tecla_pressionada == 'C')
{

download();
}

if (tecla_pressionada == 'D')
{

configuracao();
}
}

void bomba(){

char var1;
char var2;
int segundo;
char estado;
char m0;
char m1;
char s0;
char s1;

lcd.clear();
lcd.setCursor(0,0);
lcd.print("---MODO BOMBA---");
delay(3000);

lcd.clear();
lcd.setCursor(0,0);
lcd.print("Senha: ");
lcd.setCursor(6,1);
lcd.print("----");

cod1 = teclado.waitForKey();
if (cod1 != NO_KEY) {
lcd.setCursor(6,1);
lcd.print("");
cod2 = teclado.waitForKey();
lcd.setCursor(7,1);
lcd.print("
");
cod3 = teclado.waitForKey();
lcd.setCursor(8,1);
lcd.print("");
cod4 = teclado.waitForKey();
lcd.setCursor(9,1);
lcd.print("
");
var1 = teclado.waitForKey();

if (var1 == bt_confirma){

lcd.clear();
lcd.setCursor(1,0);
lcd.print("Insira o tempo");
lcd.setCursor(5,1);
lcd.print("--:--");

m0 = teclado.waitForKey();

if (m0 != NO_KEY){
lcd.setCursor(5,1);
lcd.print(m0);
m1 = teclado.waitForKey();
lcd.setCursor(6,1);
lcd.print(m1);
lcd.setCursor(7,1);
lcd.print(":");
s0 = teclado.waitForKey();
lcd.setCursor(8,1);
lcd.print(s0);
s1 = teclado.waitForKey();
lcd.setCursor(9,1);
lcd.print(s1);
var2 = teclado.waitForKey();

if (var2 == bt_confirma){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("--BOMBA ARMADA--");
lcd.setCursor(5,1);
lcd.print(m0);
lcd.setCursor(6,1);
lcd.print(m1);
lcd.setCursor(7,1);
lcd.print(":");
lcd.setCursor(8,1);
lcd.print(s0);
lcd.setCursor(9,1);
lcd.print(s1);
estado = 1;
segundo = 1000;

while (estado == 1)
{

int i = -1;

char tecla_pressionada = teclado.getKey();

while (tecla_pressionada == '#'){
lcd.setCursor(0,0);
lcd.print("DESARMANDO ----");

if (vcod1 != NO_KEY){
vcod1 = teclado.getKey();
}
lcd.setCursor(12,0);
lcd.print("*");

if (vcod2 != NO_KEY){
vcod2 = teclado.getKey();
}
lcd.setCursor(13,0);
lcd.print("*");

if (vcod3 != NO_KEY){
vcod3 = teclado.getKey();
}
lcd.setCursor(14,0);
lcd.print("*");

if (vcod4 != NO_KEY){
vcod4 = teclado.getKey();
}
lcd.setCursor(15,0);
lcd.print("*");

if (cod1 != vcod1 || cod2 != vcod2 || cod3 != vcod3 || cod4 != vcod4){
lcd.setCursor(0,0);
lcd.print("-CODIGO ERRADO--");
delay(3000);
lcd.print("-----ARMADA-----");
}

if (cod1 == vcod1 && cod2 == vcod2 && cod3 == vcod3 && cod4 == vcod4){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("---DESARMADA----");
lcd.setCursor(0,1);
lcd.print("--------");
}
}

if (s1 > 47)
{
lcd.setCursor(5,1);
lcd.print(m0);
lcd.setCursor(6,1);
lcd.print(m1);
lcd.setCursor(7,1);
lcd.print(":");
lcd.setCursor(8,1);
lcd.print(s0);
lcd.setCursor(9,1);
lcd.print(s1);
delay(segundo);
s1--;

if (s1 == 47 && s0 > 48)
{
lcd.setCursor(8, 1);
s0--;
lcd.print(s0);
s1 = 57;
lcd.setCursor(9, 1);
lcd.print(s1);
}

if (s1 == 47 && s0 == 48 && m1 > 48)
{
lcd.setCursor(5, 1);
m1--;
lcd.print(m1);
s0 = 53;
lcd.setCursor(8, 1);
lcd.print(s0);
s1 = 57;
lcd.setCursor(9, 1);
lcd.print(s0);
}

if (s1 == 47 && s0 == 48 && m1 == 48 && m0 > 48)
{
lcd.setCursor(7, 1);
m0--;
lcd.print(m0);
m1 = 57;
lcd.setCursor(8, 1);
lcd.print(m1);
s0 = 53;
lcd.setCursor(10, 1);
lcd.print(s0);
s1 = 57;
lcd.setCursor(11, 1);
lcd.print(s1);
}

if (s1 == 47 && s0 == 48 && m1 == 48 && m0 == 48 && segundo == 0)
{
lcd.clear();
lcd.setCursor(4,0);
lcd.print("BOOM!!!!");
}

if (s1 == 47 && s0 == 48 && m1 == 48 && m0 == 48)
{
lcd.clear();
lcd.setCursor(4, 0);
lcd.print("BOOM!!!!");
delay(1000);
}
}
}
}
}
}
}
}

void dominacao() {

lcd.clear();
lcd.setCursor(0,0);
lcd.print("-MODO DOMINACAO-");
delay(3000);

}

void download() {

lcd.clear();
lcd.setCursor(0,0);
lcd.print("-MODO DOWNLOAD-");
delay(3000);

}

void configuracao() {

lcd.clear();
lcd.setCursor(0,0);
lcd.print("CONFIGURAR BOMBA");
delay(3000);

}

Quem poder me ajudar, vou ficar agradecido.

E um pouco complicado entender o codigo. Acho seria muito bom colocar varias comentarios no codigo. Geralmente, os comentarios ajudam a entender melhor o que acontece.

Alem disso, parece ter problema no codigo:
vc tem dois while que não podem dar certo porque vc testa uma valor mas dentro do while esta valor não muda.

estado = 1;
while (estado == 1)
{
mas aqui, (entao dentro do while) vc não usa mas "estado". Ao seja, parece que vc vai ficar tempo todo dentro do while.

tambem aqui:
char tecla_pressionada = teclado.getKey();
while (tecla_pressionada == '#'){
Mesma coisa: vc inicialisa tecla_pressionada mas depois, dentro do while, vc não muda a valor. Entao se vc entra no while, vc vai ficar dentro.

Geralmente, fazemos uma coisa do tipo:
char tecla_pressionada = teclado.getKey();
while (tecla_pressionada == '#')
{
// Tratamento

tecla_pressionada = teclado.getKey();
}