Ajuda problemas com programação . Senha para Abrir Porta.

OLa Galera. To com problemas num projeto q estou desenvolvendo.

Resumo


 O botão( # ) é para abrir a prota ,se ela estiver trancada ira pedir para colocar senha!
E o botão ( * ) ira apenas trancar.



Problema:

Preciso guardar na variavel estado ( trancado ou destrancado).
Ou seja o estado atual é trancado ou destrancado?

Mas não faço ideia de como fazer isso !

Programação:       tá faltando muita coisa mas ja da pra ter uma ideia

#define estado=(trancado||destrancado);   // ???????????
#include <Keypad.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
char senha[ ] = {'0','1','0','2','0','3','\0'};
char palavra[ ] = {'0','0','0','0','0','0','\0'};
int fechadura = 10;
LiquidCrystal_I2C lcd(0x38,16,2);  // set the LCD address to 0x20 for a 16 chars and 2 line display
int contador = 0;
const byte ROWS = 4; //four rows
const byte COLS = 3; //four columns
//define the cymbols on the buttons of the keypads
char keys[ROWS][COLS] =
{
  {'1','2','3'},
  {'4','5','6'},
  {'7','8','9'},
  {'*','0','#'}
};
byte rowPins[ROWS] = {9, 8, 2, 3}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {6, 5, 4}; //connect to the column pinouts of the keypad

//initialize an instance of class NewKeypad
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );





void setup()
{

  lcd.init();                      // initialize the lcd
  lcd.backlight();
  Serial.begin(9600);
  lcd.begin(16,2);
  pinMode (fechadura,OUTPUT);
  digitalWrite(fechadura,LOW);
  lcd.clear();
  lcd.print("Inicializando...");
  delay(2000);
  lcd.clear();
}

void loop()
{
  char key = keypad.getKey();
 if (key)
 {
  lcd.setCursor(0,0);
  lcd.print("Tecle # p/ abrir");
  lcd.setCursor(1,0);
  lcd.print("Tecle* p/Trancar");
  lcd.print(key);
  delay(500);
  palavra[contador] = key;
  contador++;
 
 
  if (key == '#');   //ABRIR
  {
      
   if trancado;
  {
    lcd.clear();  
    lcd.print("Digite a senha!");
    
    if(contador == 6)
  {
    palavra[contador] = '\0';
    if((palavra[0] == senha[0]) && (palavra[1] == senha[1]) && (palavra[2] == senha[2]) && (palavra[3] == senha[3]) && (palavra[4] == senha[4]) && (palavra[5] == senha[5]) && (palavra[6] == senha[6]))
      {
         lcd.clear();  
         lcd.print("Senha correta !");
         delay(2000);
         estado = trancado;
         digitalWrite(fechadura,LOW);
         contador = 0;
      }
     else
       {
         lcd.clear();
         lcd.print("Senha incorreta!");
         delay(2000);
         contador = 0;
         lcd.clear();
         lcd.print("Digite a senha: ");
         digitalWrite(fechadura,LOW);
       }
     }
  }
     else destrancado;
       {
          lcd.clear();  
          lcd.print("Empurre a porta!");
          digitalWrite(fechadura,HIGH);
       }
  }
 
 if (key == '*');       //Trancar
  {
 
    if trancado;
    {
     lcd.clear();  
     lcd.print("Porta esta trancada!");
     digitalWrite(fechadura,LOW);
    }
    else destrancado;
    {
     lcd.clear();  
     lcd.print("Porta Trancada!");
     digitalWrite(fechadura,LOW);
    }
  }
 }
}

Sou meio novo em programação.

Então se alguem puder me ajudar. Ficarei muito grato.

Exibições: 695

Responder esta

Respostas a este tópico

Use uma variável do tipo inteiro (int), onde o valor 0 (zero) pode ser destrancado e 1 (um) trancado:

mais ou menos assim:

//-----------------------------------------------------------------------------------------------

int trancado = 0; // inicia a variável

//depois é só criticar

if (trancado)  // se o valor de 'trancado' for 1 (um)

{

    lcd.clear();  
    lcd.print("Digite a senha!");

    ...

    ...   

    lcd.print("Senha correta !");

   estado = 0;  //altera o valor da variável para Zero (destrancado)

}else{  // caso contrario, ou seja, o valor da variável 'trancado' é Zero.
          lcd.clear();  
          lcd.print("Empurre a porta!");
          digitalWrite(fechadura,HIGH);

          trancado = 1; //passa o valor da variável para 1 (trancado)

}

//-----------------------------------------------------------------------------------------------

é por ai mesmo, eu tenho um codigo que uso que usa uma senha salva na eprom, se tiver interesse te passo, é grande mas funciona perfeito 

Valeu pela resposta!!

Resolveu parte do problema. mas agora não consegue fazer a leitura da senha !


Ex : Quando teclo( * ) tranca a porta.     Ai para abrir ( # ) > deveria entrar no modo de fazer a verificação.
Mas ele só verifica quando eu teclo # ou seja(entra e sai), Fica assim no lcd >>>> ( Digite a senha )
                                                                                                                               ######

Ele deveria ficar preso lá dentro até q digitase todos os digitos(010203).

PROGRAMAÇÃO ATUAL

int trancado =0;
int estado=0;
#include <Keypad.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
char senha[ ] = {'0','1','0','2','0','3','\0'};
char palavra[ ] = {'0','0','0','0','0','0','\0'};
int fechadura = 10;
LiquidCrystal_I2C lcd(0x38,16,2); // set the LCD address to 0x20 for a 16 chars and 2 line display
int contador = 0;
const byte ROWS = 4; //four rows
const byte COLS = 3; //four columns
char keys[ROWS][COLS] =
{
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
};
byte rowPins[ROWS] = {9, 8, 2, 3}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {6, 5, 4}; //connect to the column pinouts of the keypad
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

void setup()
{
lcd.init(); // initialize the lcd
lcd.backlight();
Serial.begin(9600);
lcd.begin(16,2);
pinMode (fechadura,OUTPUT);
digitalWrite(fechadura,LOW);
lcd.clear();
lcd.print("Inicializando...");
delay(2000);
lcd.clear();
}

void loop()
{
  char key = keypad.getKey();
  lcd.setCursor(0,0);
  lcd.print("Tecle # p/ abrir");
  lcd.setCursor(0,1);
  lcd.print("Tecle* p/Trancar");
   if (key)
  {
   palavra[contador] = key;
   contador++;
      if (key=='#') //ABRIR
     {
           if (trancado)
        {
           lcd.clear();
           lcd.setCursor(0,0);
           lcd.print("Digite a senha: ");
           lcd.setCursor(contador,1);
           lcd.print(key);
           delay(500);
           

          if(contador == 6)
         {
           palavra[contador] = '\0';
           if((palavra[0] == senha[0]) && (palavra[1] == senha[1]) && (palavra[2] == senha[2]) && (palavra[3] == senha[3]) && (palavra[4] == senha[4]) && (palavra[5] == senha[5]) && (palavra[6] == senha[6]))
              {
                 lcd.clear();
                 lcd.print("Senha correta !");
                 delay(2000);
                 digitalWrite(fechadura,HIGH);
                 trancado=0;
                 contador = 0;
              }
           else
          {
              lcd.clear();
              lcd.print("Senha incorreta!");
              delay(2000);
              contador = 0;
              lcd.clear();
              lcd.print(" Digite");
              lcd.setCursor(0,1);
              lcd.print(" Novamente!");
              delay(2000);
              digitalWrite(fechadura,LOW);
              trancado=1;
             }
        }
   }
          else // se estiver aberto
       {
          lcd.clear();
          lcd.print("Empurre a porta!");
          delay(2000);
          digitalWrite(fechadura,HIGH);
          estado=0; 
          trancado=0;
        }
   }
     if (key == '*') //Trancar
  {

         if (trancado)
      {
           lcd.clear();
           lcd.print("Já ta trancada!");
           delay(2000);
           digitalWrite(fechadura,LOW);
           estado=0;
           trancado=1;
      }
     else
      {
           lcd.clear();
           lcd.print("Porta Trancada!");
           delay(2000);
           digitalWrite(fechadura,LOW);
           trancado=1;
           estado=0;
       }
    }
 }
}

Vou continuar pesquisando se conseguir posto aqui !!!

abraço.

amanha qdo eu chegar no  trabalho  te  passo o arquivo  q compilei um sistema de senha pra vc usar

Blz. pode ser.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço