Ir ao conteúdo
  • Cadastre-se

Sistema que acende e apaga uma lâmpada com senha


Posts recomendados

Olá pessoal, eu estou desenvolvendo um projeto onde uma lâmpada será acesa por um relê caso uma senha que será digitada em um teclado matricial 4x4 esteja correta. Sou iniciante em Arduino, mas percebi que a lâmpada será acesa apenas se a senha for digitada corretamente e, após inserir a senha, a letra "C" for pressionada. O único problema é que esse código faz com que o relê seja acionado apenas por dois segundos, e eu precisaria que o relê fosse desativado apenas quando a letra "D" do teclado for pressionada, o que, consequentemente, desativaria a lâmpada. Enfim, como sou iniciante, não faço a menor ideia de como adaptar esse código para que o relê seja desativado após pressionar a letra "D" no teclado. Já pesquisei na internet e até aqui mesmo no fórum, mas não consegui encontrar nada, por isso, venho aqui pedir a ajuda de vocês. Segue abaixo o código que estou usando e uma imagem das ligações do circuito em anexo.

#include <Password.h> // Biblioteca utilizada para controle de senha.#include <Keypad.h> // Biblioteca para controle do teclado de matrizes.// Senha utilizada para acionamento do rele.Password password = Password( "1234" );  const byte ROWS = 4;  // Quatro linhas por...const byte COLS = 4;  // Quatro colunas.// Define o Keypad (mapa do circuito do teclado).char keys[ROWS][COLS] = {  {'1','2','3','A'},  {'4','5','6','B'},  {'7','8','9','C'},  {'*','0','#','D'}};// Conecta o teclado matricial em linha 0, linha 1, linha 2, linha 3 e linha 4... //dos pinos do arduino.byte rowPins[ROWS] = {9,8,7,6};// Conecta o teclado matricial em coluna 0, coluna 1, coluna 2, coluna 3 e...  //coluna 4 do arduino.byte colPins[COLS] = {12,11,10,5};// Cria um objeto Keypad.Keypad keypad=Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);void setup(){  pinMode(4, OUTPUT);  // Define pino 4 como saída.  Serial.begin(9600);  // Inicializa Serial Monitor.  keypad.addEventListener(keypadEvent);  keypad.setDebounceTime(250);}void loop(){  keypad.getKey();}void keypadEvent(KeypadEvent eKey){  switch (keypad.getState()){  // Condição switch...   case PRESSED:  // Se precionado algum botão...   Serial.print("Digitado: ");  // Aparecera no Serial Monitor, Digitado: "X".   Serial.println(eKey);  // Armazena numero digitado na variável eKey.   switch (eKey){   // Pressionando "C" confirma se a senha foi digitado corretamente.     case 'C': guessPassword();       break;      default:     password.append(eKey);    }  }}void guessPassword(){// Informa no Serial Monitor "Verificando, aguarde...".     Serial.print("Verificando, aguarde... ");       if (password.evaluate()){	// Informa no Serial Monitor "Acionando rele...".        Serial.println("Acionando rele... ");         digitalWrite(4, HIGH);   // Ativa o rele.        delay(2000);  // Rele fica acionado por 2 segundos e depois...        digitalWrite(4, LOW);   // Desativa o rele.        password.reset(); // Apaga a senha.     }else{        digitalWrite(4, LOW);        Serial.println("Senha Invalida !");        password.reset(); // Apaga a senha.     }}

post-749132-0-90053700-1446405098_thumb.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

  • 
    

    // Pressionando "C" confirma se a senha foi digitado corretamente.

    case 'C': liga_rele();

    case 'D': desliga_rele();

    break;

    default:

    password.append(eKey);

    }

    Não entendo quase nada de 'C', mas deve ser como acima, bastando criar as funções de ligar e desligar o relê. Será que estou certo? Caso contrário, me corrijam.

Link para o comentário
Compartilhar em outros sites

Talvez assim funcione...  ^_^

void keypadEvent(KeypadEvent eKey){  switch (keypad.getState()){  // Condição switch...   case PRESSED:  // Se precionado algum botão...   Serial.print("Digitado: ");  // Aparecera no Serial Monitor, Digitado: "X".   Serial.println(eKey);  // Armazena numero digitado na variável eKey.   switch (eKey){   // Pressionando "C" confirma se a senha foi digitado corretamente.     case 'C': guessPassword();       break;          // A qualquer momento que o 'D' for digitado o rele será desativado     // assim a senha não poderá conter a letra 'D'...     case 'D':               // <--- ADICIONADO     digitalWrite(4, LOW);   // Desativa o rele. <--- ADICIONADO     Serial.println("Rele desativado... ");      password.reset();       // Limpa digitos digitados anteriormente <--- ADICIONADO     break;      default:     password.append(eKey);    }  }}:::void guessPassword(){// Informa no Serial Monitor "Verificando, aguarde...".     Serial.print("Verificando, aguarde... ");       if (password.evaluate()){	// Informa no Serial Monitor "Acionando rele...".        Serial.println("Acionando rele... ");         digitalWrite(4, HIGH);   // Ativa o rele.                // Comentando para não desligar o rele após passados 2 seundos... <--- RETIRADO        //delay(2000);  // Rele fica acionado por 2 segundos e depois... <--- RETIRADO        //digitalWrite(4, LOW);   // Desativa o rele. <--- RETIRADO        password.reset(); // Apaga a senha.     }        else{           digitalWrite(4, LOW);           Serial.println("Senha Invalida !");           password.reset(); // Apaga a senha.        }}
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!