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.
Tags:
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.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por