Problemas com tempo no arduino mega,

meu codigo é muito extenso, ta funcionando, o A0 ta ligando o led quando digito minha combinação e acende o led que ta na porta A0 normalmente, só que preciso que ele apague se seg for maior ou igual a 5, não funciona, ele zera o seg como ta ali no if, mas nao apaga depois de passar o tempo, no monitor virtual conta certinho, zera, mas nao apaga o led A0 quando passa o tempo. Se alguem puder me dar uma luz, eu vou presentear como tutorial desse game que to fazendo, obrigado!

i#include <SD.h>
#define SD_ChipSelectPin 53 
#include <SPI.h>
#include <TMRpcm.h>
#include <pcmConfig.h>
#include <Arduino.h>
#include <Keypad.h> // Biblioteca do codigo
#include <LedControl.h>
#include <Password.h>


char mychar;//variável audio
const int CS_PIN = 53; //Pino de dados
TMRpcm tmrpcm;//variável audio


// Definição da matriz de led de ambos os jogadores
#define  din   19
#define  clk   20 
#define  load  21

#define buzzer 13           // Define o pino D11 como buzzer 


// Definição dos botões jogador 1
#define botaoPinligamissil 40
#define botaoPinrecarga 41






const byte LINHAS = 8; // Linhas do teclado
const byte COLUNAS = 4; // Colunas do teclado
// Define the Keymap
const char TECLAS_MATRIZ[LINHAS][COLUNAS]  = {
  {'A', 'B', 'C', 'D'},
  {'E', 'F', 'G', 'H'},
  {'1', '2', '3', '4'},
  {'5', '*', 'U', '#'},

   {'I', 'J', 'L', 'M'},
  {'N', 'O', 'P', 'Q'},
  {'6', '7', '8', '9'},
  {'0', 'R', 'S', '$'}
};
// Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduino pins.
const byte PINOS_LINHAS[LINHAS]  = { 11,10, 9, 8,3,2,14,15, };// Connect keypad COL0, COL1 and COL2 to these Arduino pins.
const byte PINOS_COLUNAS[COLUNAS] = { 7, 6, 5, 4, };

// Create the Keypad

Keypad teclado_personalizado = Keypad(makeKeymap(TECLAS_MATRIZ), PINOS_LINHAS, PINOS_COLUNAS, LINHAS, COLUNAS); // Inicia teclado
LedControl lc = LedControl(19, 20, 21, 2);


void setup(){
 Serial.begin(9600);

tmrpcm.play("ini2.wav");
 pinMode(13, OUTPUT); 
digitalWrite(13, LOW);

pinMode(A0, OUTPUT); 
digitalWrite(A0, LOW);


digitalWrite(ledPin1, HIGH);
pinMode(botaoPinligamissil,INPUT);
pinMode(botaoPinrecarga,INPUT);
pinMode(ledPin1,OUTPUT);
pinMode(ledPin2,OUTPUT);
pinMode(ledPin3,OUTPUT);
digitalWrite(ledPin1, HIGH);
digitalWrite(ledPin2, HIGH);
digitalWrite(ledPin3, HIGH);
digitalWrite(botaoPinligamissil, HIGH);
digitalWrite(botaoPinrecarga, HIGH);


pinMode(35,INPUT);
pinMode(36,INPUT);
pinMode(ledPin4,OUTPUT);
pinMode(ledPin5,OUTPUT);
tmrpcm.speakerPin = 46;//Porta da saida //5,6,11 or 46 on Mega, 9 on Uno, Nano, etc

  if(!SD.begin(CS_PIN)) {
    
    return;
    }

}


void loop(){

 char leitura_teclas = teclado_personalizado.getKey(); // Atribui a variavel a leitura do teclado

    if((digitalRead(40)==LOW)&& (leitura_teclas == '#'))
  {ledState++;
tmrpcm.play("miss.wav");
  }
  
 else if  ((digitalRead(40)==HIGH)&& (leitura_teclas == '#'))
  {//ledState=ledState;
tmrpcm.play("bip.wav");
  }

if  ((digitalRead(37)==LOW)&& (leitura_teclas == '#'))
  {//ledState=ledState;
tmrpcm.play("bip.wav");
  }

     if      ((digitalRead(35)==LOW)&& (leitura_teclas == '$'))
  {ledState2++;
tmrpcm.play("miss.wav");
  }

 else if  ((digitalRead(35)==HIGH)&& (leitura_teclas == '$'))
  {//=ledState2;
tmrpcm.play("bip.wav");
  }

if  ((digitalRead(32)==LOW)&& (leitura_teclas == '$'))
  {//ledState=ledState;
tmrpcm.play("bip.wav");
  }



  if(leitura_teclas){ // Se alguma tecla foi pressionada 
  beep();
   
    if((leitura_teclas == '#')||(leitura_teclas == '$')) // Se a tecla 'C' foi pressionada
  
    {  


if (senha.evaluate()) {

  delay(5500);
  lc.setLed(0,0,0,true);
 digitalWrite(A0, HIGH); 
seg=0;
}
if (seg>=5)
{
   digitalWrite(A0, LOW); 
}

      senha.reset(); // Limpa a variavel senha

      if(senha2.evaluate()) // Verifica se a senha digitada esta correta
      {
        
        lc.setLed(0,1,0,true);
        delay(1000);
        lc.setLed(0,1,0,false);
        
      }
      senha2.reset(); // Limpa a variavel senha

    if(senha3.evaluate()) // Verifica se a senha digitada esta correta
        {
      {
        lc.setLed(0,2,0,true);
        delay(1000);
        lc.setLed(0,2,0,false);
      } 
        }
    senha3.reset(); // Limpa a variavel senha

      if(senha4.evaluate()) // Verifica se a senha digitada esta correta
      {
        {
        lc.setLed(0,3,0,true);
        delay(1000);
        lc.setLed(0,3,0,false);
        } 
      }
      senha4.reset(); // Limpa a variavel senha

    if(senha5.evaluate()) // Verifica se a senha digitada esta correta
        {
      {
        lc.setLed(0,4,0,true);
        delay(1000);
        lc.setLed(0,4,0,false);
      } 
        }
    senha5.reset(); // Limpa a variavel senha

//COLUNA B
      if(senha6.evaluate()) // Verifica se a senha digitada esta correta
      {
        {delay(5300);
        lc.setLed(0,0,1,true);
        delay(1000);
        lc.setLed(0,0,1,false);
        } 
      }
      senha6.reset(); // Limpa a variavel senha 

       if(senha7.evaluate()) // Verifica se a senha digitada esta correta
      {
        {
        lc.setLed(0,1,1,true);
        delay(1000);
        lc.setLed(0,1,1,false);
        } 
      }
      senha7.reset(); // Limpa a variavel senha

       if(senha8.evaluate()) // Verifica se a senha digitada esta correta
      {
        {
        lc.setLed(0,2,1,true);
        delay(1000);
        lc.setLed(0,2,1,false);
        } 
      }
      senha8.reset(); // Limpa a variavel senha
 

       if(senha9.evaluate()) // Verifica se a senha digitada esta correta
      {
        {
        lc.setLed(0,3,1,true);
        delay(1000);
        lc.setLed(0,3,1,false);
        } 
      }
      senha9.reset(); // Limpa a variavel senha
 

       if(senha10.evaluate()) // Verifica se a senha digitada esta correta
      {
        {
        lc.setLed(0,4,1,true);
        delay(1000);
        lc.setLed(0,4,1,false);
        } 
      }
      senha10.reset(); // Limpa a variavel senha
 
//COLUNA C
       if(senha11.evaluate()) // Verifica se a senha digitada esta correta
      {
        {
        lc.setLed(0,0,2,true);
        delay(1000);
        lc.setLed(0,0,2,false);
        } 
      }
      senha11.reset(); // Limpa a variavel senha

       if(senha12.evaluate()) // Verifica se a senha digitada esta correta
      {
        {
        lc.setLed(0,1,2,true);
        delay(1000);
        lc.setLed(0,1,2,false);
        } 
      }
      senha12.reset(); // Limpa a variavel senha

       if(senha13.evaluate()) // Verifica se a senha digitada esta correta
      {
        {
        lc.setLed(0,2,2,true);
        delay(1000);
        lc.setLed(0,2,2,false);
        } 
      }
      senha13.reset(); // Limpa a variavel senha
  
         if(senha14.evaluate()) // Verifica se a senha digitada esta correta
      {
        {
        lc.setLed(0,3,2,true);
        delay(1000);
        lc.setLed(0,3,2,false);
        } 
      }
      senha14.reset(); // Limpa a variavel senha

       if(senha15.evaluate()) // Verifica se a senha digitada esta correta
      {
        {
        lc.setLed(0,4,2,true);
        delay(1000);
        lc.setLed(0,4,2,false);
        } 
      }
      senha15.reset(); // Limpa a variavel senha

//COLUNA D
       if(senha16.evaluate()) // Verifica se a senha digitada esta correta
      {
        {
        lc.setLed(0,0,3,true);
        delay(1000);
        lc.setLed(0,0,3,false);
        } 
      }
      senha16.reset(); // Limpa a variavel senha

      if(senha17.evaluate()) // Verifica se a senha digitada esta correta
        {
      {
        lc.setLed(0,1,3,true);
        delay(1000);
        lc.setLed(0,1,3,false);
      } 
        }
    senha17.reset(); // Limpa a variavel senha

      if(senha18.evaluate()) // Verifica se a senha digitada esta correta
      {
        {
        lc.setLed(0,2,3,true);
        delay(1000);
        lc.setLed(0,2,3,false);
        } 
      }
      senha18.reset(); // Limpa a variavel senha

    if(senha19.evaluate()) // Verifica se a senha digitada esta correta
        {
      {
        lc.setLed(0,3,3,true);
        delay(1000);
        lc.setLed(0,3,3,false);
      } 
        }
    senha19.reset(); // Limpa a variavel senha

      if(senha20.evaluate()) // Verifica se a senha digitada esta correta
      {
        {
        lc.setLed(0,4,3,true);
        delay(1000);
        lc.setLed(0,4,3,false);
        } 
      }
      senha20.reset(); // Limpa a variavel senha

//COLUNA E

    if(senha21.evaluate()) // Verifica se a senha digitada esta correta
        {
      {
        lc.setLed(0,0,4,true);
        delay(1000);
        lc.setLed(0,0,4,false);
      } 
        }
    senha21.reset(); // Limpa a variavel senha

      if(senha22.evaluate()) // Verifica se a senha digitada esta correta
      {
        {
        lc.setLed(0,1,4,true);
        delay(1000);
        lc.setLed(0,1,4,false);
        } 
      }
      senha22.reset(); // Limpa a variavel senha 

       if(senha23.evaluate()) // Verifica se a senha digitada esta correta
      {
        {
        lc.setLed(0,2,4,true);
        delay(1000);
        lc.setLed(0,2,4,false);
        } 
      }
      senha23.reset(); // Limpa a variavel senha

       if(senha24.evaluate()) // Verifica se a senha digitada esta correta
      {
        {
        lc.setLed(0,3,4,true);
        delay(1000);
        lc.setLed(0,3,4,false);
        } 
      }
      senha24.reset(); // Limpa a variavel senha
 
       if(senha25.evaluate()) // Verifica se a senha digitada esta correta
      {
        {
        lc.setLed(0,4,4,true);
        delay(1000);
        lc.setLed(0,4,4,false);
        } 
      }
      senha25.reset(); // Limpa a variavel senha
 
//COLUNA F
       if(senha26.evaluate()) // Verifica se a senha digitada esta correta
      {
        {
        lc.setLed(0,0,5,true);
        delay(1000);
        lc.setLed(0,0,5,false);
        } 
      }
      senha26.reset(); // Limpa a variavel senha

       if(senha27.evaluate()) // Verifica se a senha digitada esta correta
      {
        {
        lc.setLed(0,1,5,true);
        delay(1000);
        lc.setLed(0,1,5,false);
        } 
      }
      senha27.reset(); // Limpa a variavel senha

       if(senha28.evaluate()) // Verifica se a senha digitada esta correta
      {
        {
        lc.setLed(0,2,5,true);
        delay(1000);
        lc.setLed(0,2,5,false);
        } 
      }
      senha28.reset(); // Limpa a variavel senha

       if(senha29.evaluate()) // Verifica se a senha digitada esta correta
      {
        {
        lc.setLed(0,3,5,true);
        delay(1000);
        lc.setLed(0,3,5,false);
        } 
      }
      senha29.reset(); // Limpa a variavel senha

      if(senha30.evaluate()) // Verifica se a senha digitada esta correta
      {
        {
        lc.setLed(0,4,5,true);
        delay(1000);
        lc.setLed(0,4,5,false);
        } 
      }
      senha30.reset(); // Limpa a variavel senha

//COLUNA G
       if(senha31.evaluate()) // Verifica se a senha digitada esta correta
      {
        {
        lc.setLed(0,0,6,true);
        delay(1000);
        lc.setLed(0,0,6,false);
        } 
      }
      senha31.reset(); // Limpa a variavel senha

       if(senha32.evaluate()) // Verifica se a senha digitada esta correta
      {
        {
        lc.setLed(0,1,6,true);
        delay(1000);
        lc.setLed(0,1,6,false);
        } 
      }
      senha32.reset(); // Limpa a variavel senha

       if(senha33.evaluate()) // Verifica se a senha digitada esta correta
      {
        {
        lc.setLed(0,2,6,true);
        delay(1000);
        lc.setLed(0,2,6,false);
        } 
      }
      senha33.reset(); // Limpa a variavel senha

       if(senha34.evaluate()) // Verifica se a senha digitada esta correta
      {
        {
        lc.setLed(0,3,6,true);
        delay(1000);
        lc.setLed(0,3,6,false);
        } 
      }
      senha34.reset(); // Limpa a variavel senha

      if(senha35.evaluate()) // Verifica se a senha digitada esta correta
      {
        {
        lc.setLed(0,4,6,true);
        delay(1000);
        lc.setLed(0,4,6,false);
        } 
      }
      senha35.reset(); // Limpa a variavel senha

//COLUNA H

       if(senha36.evaluate()) // Verifica se a senha digitada esta correta
      {
        {
        lc.setLed(0,0,7,true);
        delay(1000);
        lc.setLed(0,0,7,false);
        } 
      }
      senha36.reset(); // Limpa a variavel senha

       if(senha37.evaluate()) // Verifica se a senha digitada esta correta
      {
        {
        lc.setLed(0,1,7,true);
        delay(1000);
        lc.setLed(0,1,7,false);
        } 
      }
      senha37.reset(); // Limpa a variavel senha

       if(senha38.evaluate()) // Verifica se a senha digitada esta correta
      {
        {
        lc.setLed(0,2,7,true);
        delay(1000);
        lc.setLed(0,2,7,false);
        } 
      }
      senha38.reset(); // Limpa a variavel senha

       if(senha39.evaluate()) // Verifica se a senha digitada esta correta
      {
        {
        lc.setLed(0,3,7,true);
        delay(1000);
        lc.setLed(0,3,7,false);
        } 
      }
      senha39.reset(); // Limpa a variavel senha

      if(senha40.evaluate()) // Verifica se a senha digitada esta correta
      {
        {
        lc.setLed(0,4,7,true);
        delay(1000);
        lc.setLed(0,4,7,false);
        } 
      }
      senha40.reset(); // Limpa a variavel senha


      // COMBINAÇÕES JOGADOR 1 PRA ACENDER LEDS DO JOGADOR 2
      //COLUNA A
      if(senha41.evaluate()) // Verifica se a senha digitada esta correta
        {
      {delay(5300);
        lc.setLed(1,0,0,true);
        delay(1000);
        lc.setLed(1,0,0,false);
      } 
        }
    senha41.reset(); // Limpa a variavel senha

      if(senha42.evaluate()) // Verifica se a senha digitada esta correta
      {
        {
        lc.setLed(1,1,0,true);
        delay(1000);
        lc.setLed(1,1,0,false);
        } 
      }
      senha42.reset(); // Limpa a variavel senha

    if(senha43.evaluate()) // Verifica se a senha digitada esta correta
        {
      {
        lc.setLed(1,2,0,true);
        delay(1000);
        lc.setLed(1,2,0,false);
      } 
        }
    senha43.reset(); // Limpa a variavel senha

      if(senha44.evaluate()) // Verifica se a senha digitada esta correta
      {
        {
        lc.setLed(1,3,0,true);
        delay(1000);
        lc.setLed(1,3,0,false);
        } 
      }
      senha44.reset(); // Limpa a variavel senha

    if(senha45.evaluate()) // Verifica se a senha digitada esta correta
        {
      {
        lc.setLed(1,4,0,true);
        delay(1000);
        lc.setLed(1,4,0,false);
      } 
        }
    senha45.reset(); // Limpa a variavel senha

//COLUNA B
      if(senha46.evaluate()) // Verifica se a senha digitada esta correta
      {
        {
        lc.setLed(1,0,1,true);
        delay(1000);
        lc.setLed(1,0,1,false);
        } 
      }
      senha46.reset(); // Limpa a variavel senha 

       if(senha47.evaluate()) // Verifica se a senha digitada esta correta
      {
        {
        lc.setLed(1,1,1,true);
        delay(1000);
        lc.setLed(1,1,1,false);
        } 
      }
      senha47.reset(); // Limpa a variavel senha

       if(senha48.evaluate()) // Verifica se a senha digitada esta correta
      {
        {
        lc.setLed(1,2,1,true);
        delay(1000);
        lc.setLed(1,2,1,false);
        } 
      }
      senha48.reset(); // Limpa a variavel senha
 

       if(senha49.evaluate()) // Verifica se a senha digitada esta correta
      {
        {
        lc.setLed(1,3,1,true);
        delay(1000);
        lc.setLed(1,3,1,false);
        } 
      }
      senha49.reset(); // Limpa a variavel senha
 

       if(senha50.evaluate()) // Verifica se a senha digitada esta correta
      {
        {
        lc.setLed(1,4,1,true);
        delay(1000);
        lc.setLed(1,4,1,false);
        } 
      }
      senha50.reset(); // Limpa a variavel senha
 
//COLUNA C
       if(senha51.evaluate()) // Verifica se a senha digitada esta correta
      {
        {
        lc.setLed(1,0,2,true);
        delay(1000);
        lc.setLed(1,0,2,false);
        } 
      }
      senha51.reset(); // Limpa a variavel senha

       if(senha52.evaluate()) // Verifica se a senha digitada esta correta
      {
        {
        lc.setLed(1,1,2,true);
        delay(1000);
        lc.setLed(1,1,2,false);
        } 
      }
      senha52.reset(); // Limpa a variavel senha

       if(senha53.evaluate()) // Verifica se a senha digitada esta correta
      {
        {
        lc.setLed(1,2,2,true);
        delay(1000);
        lc.setLed(1,2,2,false);
        } 
      }
      senha53.reset(); // Limpa a variavel senha
  
         if(senha54.evaluate()) // Verifica se a senha digitada esta correta
      {
        {
        lc.setLed(1,3,2,true);
        delay(1000);
        lc.setLed(1,3,2,false);
        } 
      }
      senha54.reset(); // Limpa a variavel senha

       if(senha55.evaluate()) // Verifica se a senha digitada esta correta
      {
        {
        lc.setLed(1,4,2,true);
        delay(1000);
        lc.setLed(1,4,2,false);
        } 
      }
      senha55.reset(); // Limpa a variavel senha

//COLUNA D
       if(senha56.evaluate()) // Verifica se a senha digitada esta correta
      {
        {
        lc.setLed(1,0,3,true);
        delay(1000);
        lc.setLed(1,0,3,false);
        } 
      }
      senha56.reset(); // Limpa a variavel senha

      if(senha57.evaluate()) // Verifica se a senha digitada esta correta
        {
      {
        lc.setLed(1,1,3,true);
        delay(1000);
        lc.setLed(1,1,3,false);
      } 
        }
    senha57.reset(); // Limpa a variavel senha

      if(senha58.evaluate()) // Verifica se a senha digitada esta correta
      {
        {
        lc.setLed(1,2,3,true);
        delay(1000);
        lc.setLed(1,2,3,false);
        } 
      }
      senha58.reset(); // Limpa a variavel senha

    if(senha59.evaluate()) // Verifica se a senha digitada esta correta
        {
      {
        lc.setLed(1,3,3,true);
        delay(1000);
        lc.setLed(1,3,3,false);
      } 
        }
    senha59.reset(); // Limpa a variavel senha

      if(senha60.evaluate()) // Verifica se a senha digitada esta correta
      {
        {
        lc.setLed(1,4,3,true);
        delay(1000);
        lc.setLed(1,4,3,false);
        } 
      }
      senha60.reset(); // Limpa a variavel senha

//COLUNA E

    if(senha61.evaluate()) // Verifica se a senha digitada esta correta
        {
      {
        lc.setLed(1,0,4,true);
        delay(1000);
        lc.setLed(1,0,4,false);
      } 
        }
    senha61.reset(); // Limpa a variavel senha

      if(senha62.evaluate()) // Verifica se a senha digitada esta correta
      {
        {
        lc.setLed(1,1,4,true);
        delay(1000);
        lc.setLed(1,1,4,false);
        } 
      }
      senha62.reset(); // Limpa a variavel senha 

       if(senha63.evaluate()) // Verifica se a senha digitada esta correta
      {
        {
        lc.setLed(1,2,4,true);
        delay(1000);
        lc.setLed(1,2,4,false);
        } 
      }
      senha63.reset(); // Limpa a variavel senha

       if(senha64.evaluate()) // Verifica se a senha digitada esta correta
      {
        {
        lc.setLed(1,3,4,true);
        delay(1000);
        lc.setLed(1,3,4,false);
        } 
      }
      senha64.reset(); // Limpa a variavel senha
 
       if(senha65.evaluate()) // Verifica se a senha digitada esta correta
      {
        {
        lc.setLed(1,4,4,true);
        delay(1000);
        lc.setLed(1,4,4,false);
        } 
      }
      senha65.reset(); // Limpa a variavel senha
 
//COLUNA F
       if(senha66.evaluate()) // Verifica se a senha digitada esta correta
      {
        {
        lc.setLed(1,0,5,true);
        delay(1000);
        lc.setLed(1,0,5,false);
        } 
      }
      senha66.reset(); // Limpa a variavel senha

       if(senha67.evaluate()) // Verifica se a senha digitada esta correta
      {
        {
        lc.setLed(1,1,5,true);
        delay(1000);
        lc.setLed(1,1,5,false);
        } 
      }
      senha67.reset(); // Limpa a variavel senha

       if(senha68.evaluate()) // Verifica se a senha digitada esta correta
      {
        {
        lc.setLed(1,2,5,true);
        delay(1000);
        lc.setLed(1,2,5,false);
        } 
      }
      senha68.reset(); // Limpa a variavel senha

       if(senha69.evaluate()) // Verifica se a senha digitada esta correta
      {
        {
        lc.setLed(1,3,5,true);
        delay(1000);
        lc.setLed(1,3,5,false);
        } 
      }
      senha69.reset(); // Limpa a variavel senha

      if(senha70.evaluate()) // Verifica se a senha digitada esta correta
      {
        {
        lc.setLed(1,4,5,true);
        delay(1000);
        lc.setLed(1,4,5,false);
        } 
      }
      senha70.reset(); // Limpa a variavel senha

//COLUNA G
       if(senha71.evaluate()) // Verifica se a senha digitada esta correta
      {
        {
        lc.setLed(1,0,6,true);
        delay(1000);
        lc.setLed(1,0,6,false);
        } 
      }
      senha71.reset(); // Limpa a variavel senha

       if(senha72.evaluate()) // Verifica se a senha digitada esta correta
      {
        {
        lc.setLed(1,1,6,true);
        delay(1000);
        lc.setLed(1,1,6,false);
        } 
      }
      senha72.reset(); // Limpa a variavel senha

       if(senha73.evaluate()) // Verifica se a senha digitada esta correta
      {
        {
        lc.setLed(1,2,6,true);
        delay(1000);
        lc.setLed(1,2,6,false);
        } 
      }
      senha73.reset(); // Limpa a variavel senha

       if(senha74.evaluate()) // Verifica se a senha digitada esta correta
      {
        {
        lc.setLed(1,3,6,true);
        delay(1000);
        lc.setLed(1,3,6,false);
        } 
      }
      senha74.reset(); // Limpa a variavel senha

      if(senha75.evaluate()) // Verifica se a senha digitada esta correta
      {
        {
        lc.setLed(1,4,6,true);
        delay(1000);
        lc.setLed(1,4,6,false);
        } 
      }
      senha75.reset(); // Limpa a variavel senha

//COLUNA H

       if(senha76.evaluate()) // Verifica se a senha digitada esta correta
      {
        {
        lc.setLed(1,0,7,true);
        delay(1000);
        lc.setLed(1,0,7,false);
        } 
      }
      senha76.reset(); // Limpa a variavel senha

       if(senha77.evaluate()) // Verifica se a senha digitada esta correta
      {
        {
        lc.setLed(1,1,7,true);
        delay(1000);
        lc.setLed(1,1,7,false);
        } 
      }
      senha77.reset(); // Limpa a variavel senha

       if(senha78.evaluate()) // Verifica se a senha digitada esta correta
      {
        {
        lc.setLed(1,2,7,true);
        delay(1000);
        lc.setLed(1,2,7,false);
        } 
      }
      senha78.reset(); // Limpa a variavel senha

       if(senha79.evaluate()) // Verifica se a senha digitada esta correta
      {
        {
        lc.setLed(1,3,7,true);
        delay(1000);
        lc.setLed(1,3,7,false);
        } 
      }
      senha79.reset(); // Limpa a variavel senha

      if(senha80.evaluate()) // Verifica se a senha digitada esta correta
      {
        {
        lc.setLed(1,4,7,true);
        delay(1000);
        lc.setLed(1,4,7,false);
        } 
      }
      senha80.reset(); // Limpa a variavel senha
    }
  
    else 
    { // Caso outra tecla tenha sido pressionada   
     
    }
  }
}



















   



  
  

Olá!

Para conseguir ajuda de forma eficaz você precisa fazer um código mínimo compilável para podermos entender o que não funciona.

Abraço.

ok
vou postar

única coisa que preciso é que o led que tá na porta A0 desligue após passar os 5 segundos, o resto ta ok. no monitor serial os segundos sao contados e zerados corretamente

Tem alguns erros aqui.

  static unsigned long ult_tempo = 0;
  int tempo = millis();
  //int contaseg=seg;
  if (tempo - ult_tempo >= 1000) {
    ult_tempo = tempo;
    seg++;
  }
  if (seg > 60)
  {
    seg = 0;
  }

Primeiramente a váriavel ult_tempo eu declararia como unsigned long ult_tempo no começo do código.

Em segundo lugar a variável tempo não pode ser do tipo int visto que millis é do tipo unsigned long, além disso eu não criaria uma variável para guardar o valor de millis visto que a função pode ser chamada diretamente dentro da comparação dessa forma :

if (millis() - ult_tempo >= 1000) 
{
 ult_tempo = millis();
}

Em terceiro lugar a condição abaixo está incorreta visto que segundo nunca deveria ser igual a 60.

  if (seg > 60)
  {
    seg = 0;
  }

O correto seria:

  if (seg > 59)
  {
    seg = 0;
  }

Essa condição:

      if (seg >= 5)
      {
        digitalWrite(A0, LOW);
      }

Deve ficar fora dessse if:

if (leitura_teclas)

Dessa maneira:

     if (seg >= 5)
     {
       digitalWrite(A0, LOW);
     }

    if (leitura_teclas)
    {
     .
     .
     .
    }

vou tentar corrigir as suas sugestões, na realidade, o led so coloquei ali pra ficar mais facil de entenderem, pois quando eu digito a primeira combinação no teclado, no caso 'A1' temos um delay de 5500 ai o led 1 da matriz 1 acende, ok, ta funcionando, por isso preciso colocar o if do seg dentro desse if abaixo, pq cada led da matriz segue essa ordem, vai ficar 100 ou 120 segundos aceso e depois apaga, coloquei 5 segundos so pra teste. entao esse led control "lc.setLed(0,0,0,true);" que corresponde "lc.setLed(numero de matrizes,linha,coluna,verdadeiro ou falso);" isso ta td ok, por isso o tempo precisa ficar dentro, vi q ta lendo os segundos no monitor serial, seza quando acende o led da matriz, mas quando passa os 5 segundos nao apaga o led da matriz que eu mando apagar com"lc.setLed(0,0,0,false);"

if (senha.evaluate()) {

  delay(5500);
  lc.setLed(0,0,0,true);
seg=0;
}
if (seg>=5)
{
  lc.setLed(0,0,0,false);
}

se eu coloco o if do seg antes das teclas acende.

digite if (seg>=3)
{
   digitalWrite(A0, HIGH); 
}

mas eu preciso digitar as teclas, so fucnionar depois que digitar as teclas, esse eh o problema, talvez fazer um void tempo, o que tu acha?

Isso nunca dará certo, pois ao sair do primeiro if a variável seg tem valor zero.

É preciso passar por esse if pelo menos 5 vezes para que a condição de apagar o LED seja verdadeira.

  if (millis() - ult_tempo >= 1000) {
    ult_tempo = millis();
    seg++;
  }

exato, mas resolvi, vai ficar um pouco extenso, talvez faça uma biblioteca pra amenizar. o que fiz, tive que fazer 80 variaveis seg*, seg1, seg2 e assim por diante, pq cada led da matriz precisa ser independente. Mas obrigado pela ajuda, na real ajudou a clarear a minha mente, passa teu mail, que assim que eu terminar o jogo, vou te dar o tutorial completo pra fazer o jogo, caso tenha interesse em fazer pra curtir. Eu fiz uma bateria eletronica recentemente, foi a primeira vez q mexi com arduino, entao to meio crú, mas consegui fazer o codigo funcionar com os audios, matrizes, amps, dois teclados, etc... testei separados, mas quando junta essa tralharada de codes kkkkk, da pau, mas agora ta ok, sem travamentos. Obrigado, manda ai o teu mail.

Há maneiras mais eficientes de se fazer esse código.

Procure trabalhar com arrays e for loops.

bele, valeuuu! vou dar uma ajeitada nele. :v:

sim, arrays, ja tens alguns no código, mas sao 80 combinaçoes diferentes com seus tempos independentes com seus respectivos leds, 2 teclados, duas matrizes de leds e 80 senhas, mas vou dar uma organizada, o importante é que tá funcionando sem travamento. abraço!

Olá!

Há pouco tempo fiz para um cliente um projeto usando um teclado matricial de 4 x 4.

No projeto armazenei os cadastros de usuários em arquivos de textos.

Os cadastros são atualizados remotamente via MQTT e não preciso reinstalar o código quando a quantidade de cadastros aumenta ou alguma informação é alterada.

Fiz um exemplo que pode ser adaptado para o seu projeto.

Usando este método seu código fica mais fácil de modificar e não fica com dezenas de linhas repetidas.

#include <Arduino.h>
#include <SD.h>
#include <SimpleKeypad.h>
#include <ArduinoJson.h>

const byte SD_ChipSelectPin = 53; // Pino de dados

File file;

const byte maxDigitos = 9;
unsigned int quant_digitos = 0;

char senha[maxDigitos];
int ledStatus[4];

const byte nb_rows = 4;                   // 4 linhas
const byte nb_cols = 4;                   // 4 Colunas

char key_chars[nb_rows][nb_cols] =        // Nomes das teclas
{
  {'1', '2', '3', 'C'},                   // C = cancelar / voltar
  {'4', '5', '6', 'S'},                   // S = Subir
  {'7', '8', '9', 'D'},                   // D = Descer
  {'L', '0', '.', 'E'}                    // L = limpar / E = Enter
};

byte rowPins[nb_rows] = {62, 63, 64, 65};   // Pinos das linhas - A12 - A15
byte colPins[nb_cols] = {66, 67, 68, 69};   // Pinos das colunas - A8 - A11

SimpleKeypad keypad((char*)key_chars, rowPins, colPins, nb_rows, nb_cols);

void atualizaSenha(int val)
{
  if(quant_digitos < maxDigitos - 1)
  {
    senha[quant_digitos] = val;
    senha[quant_digitos + 1] = '\0';
    quant_digitos++;
  }
}

bool validaSenha()
{
  StaticJsonDocument<200> Json;

  char limparSenha[maxDigitos];
  String filename;

  Serial.print("Senha digitada: ");

  for(unsigned int i = 0; i < quant_digitos; i++)
  {
    filename += senha[i];
    Serial.print(senha[i]);
  }
  Serial.println("");

  filename += ".txt";

  quant_digitos = 0;
  memcpy(senha, limparSenha, sizeof(limparSenha)); // Limpa senha

  if(!SD.exists(filename))
  {
    Serial.print(filename);
    Serial.println(F(" nao encontrado"));

    return false;
  }
  else
  {
    file = SD.open(filename, FILE_READ);

    if (!file)
    {
      Serial.print(F("Nao foi possivel abrir "));
      Serial.println(filename);

      return false;
    }
    else
    {
      DeserializationError deserializeError = deserializeJson(Json, file);

      if (deserializeError)
      {
        Serial.print(F("Falha ao ler arquivo: "));
        Serial.println(filename);

        Serial.print(F("deserializeJson() failed: "));
        Serial.println(deserializeError.f_str());

        return false;
      }
      else
      {
        JsonArray arr = Json["ledStatus"].as<JsonArray>();

        for (byte i = 0; i < arr.size(); i++)
        {
          ledStatus[i] = arr[i].as<int>();
        }

        serializeJsonPretty(Json, Serial);
        Serial.println("");

        return true;
      }
    }
  }
}

void setup()
{
  Serial.begin(9600);

  if(!SD.begin(SD_ChipSelectPin))
  {
    return;
  }
}

void loop()
{
  char key = keypad.getKey();

  if(key)
  {
    Serial.print(F("Tecla pressionada: "));
    Serial.println(key);

    if(key == 'E')   // Tecla Enter
    {
      if(quant_digitos > 0)
      {
        if (validaSenha())
        {
          Serial.println(F("Senha correta!"));

          Serial.println(F("\nStatus do LED:"));

          Serial.print("add = ");
          Serial.println(ledStatus[0]);

          Serial.print("row = ");
          Serial.println(ledStatus[1]);

          Serial.print("col = ");
          Serial.println(ledStatus[2]);

          Serial.print("state = ");
          Serial.println(ledStatus[3]);

          // lc.setLed(ledStatus[0],ledStatus[1],ledStatus[2],true);
        }
        else
        {
          Serial.println(F("Senha incorreta!"));
        }
      }
    }
    else
    {
      atualizaSenha(key);
    }
  }
}

Você precisa criar um TXT cujo nome será a senha para cada modo do seu jogo, por exemplo 1234C.txt.

O conteúdo do TXT deverá ser no formato JSON, por exemplo:

{
  "modo": "normal",
  "ledStatus": [
    1,
    2,
    3,
    4
  ],
  "admin": 1
}

Neste exemplo os valores de ledStatus serão usados para mudar o status do seu LED na função setLed desta forma:

lc.setLed(ledStatus[0],ledStatus[1],ledStatus[2],true);

Eu testei esse código e o resultado que obtive na serial foi:

Tecla pressionada: 1
Tecla pressionada: 2
Tecla pressionada: 3
Tecla pressionada: 4
Tecla pressionada: C
Tecla pressionada: E
Senha digitada: 1234C
{
  "modo": "normal",
  "ledStatus": [
    1,
    2,
    3,
    4
  ],
  "admin": 1
}
Senha correta!

Status do LED:
add = 1
row = 2
col = 3
state = 4
Tecla pressionada: 1
Tecla pressionada: 2
Tecla pressionada: 3
Tecla pressionada: 4
Tecla pressionada: E
Senha digitada: 1234
1234.txt nao encontrado
Senha incorreta!

Espero que te ajude.

Abraço.

na realidade as 80 combinações nunca vão mudar, dei uma amenizada no código e diminuiu bastante, mas mantive o que tinha feito ja com algumas alterações, mas valeu, talvez esse seu código use pra outro projeto.
agora o code ta ok, só não to conseguindo usar um único botão pra usar a interrupção ou seja, preciso que acenda um led no rising e desligue no falling, na real não vai ser led, vai ser audio que ja tenho no programa. consigo fazer com dois botoes, mas com 1 botao nao ta rolando. o led apaga no quando coloco um low com o botão chave, mas se abro o botão, no caso ele vai pra nivel alto (RISISNG), o led nao volta a acender usando pino 2 do arduino mega. abs

void setup(){

attachInterrupt(0, teste, FALLING); 
attachInterrupt(0, teste2, RISING);

void teste() {
digitalWrite(ledPin24,HIGH);
}
void teste2() {
digitalWrite(ledPin24,LOW);
}

Você deve criar um novo tópico para um problema não relacionado ao inicial.

bele,valeu

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.