Go Down

Topic: Door-Lock Project (I need help about 4-digit Password) (Read 61 times) previous topic - next topic

hbugrahan

When I press the "#" button, I want it to define a random 4-digit password for the password and this new password will be valid for 2 hours. I want that password will be invalid password on the system after 2 hours. I tried hard myself but unfortunately I couldn't do it, I need your help.


There is my code, and my Project.


#include <Keypad.h>
#include <LiquidCrystal.h>
#include <EEPROM.h>
#include <Servo.h>
Servo servo;
LiquidCrystal lcd(9,8,7,6,5,4);
char password[4];
char pass[4],pass1[4];
int i=0;
char customKey=0;
const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns
char hexaKeys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {A0,A1,A2,15};
byte colPins[COLS] = {10,A5,3};


Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);


int led = 12;
int leds = 13;


int m11;
int m12;


void setup() {


servo.attach(2);


  Serial.begin(9600);
pinMode(11, OUTPUT);


lcd.begin(16,2);
pinMode(led, OUTPUT);
pinMode(leds, OUTPUT);


pinMode(m11, OUTPUT);
pinMode(m12, OUTPUT);
lcd.print("Arduino");
Serial.print("Arduino");
lcd.setCursor(0,1);
lcd.print("doorlock");
Serial.print("doorlock");
delay(2000);
lcd.clear();
lcd.print("Enter Password:");
Serial.println("Enter Password:");
lcd.setCursor(0,1);
for(int j=0;j<4;j++)
EEPROM.write(j,j+49);


for(int j=0;j<4;j++)
pass[j]=EEPROM.read(j);


}


void loop() {


int lightValue = analogRead(A4);
lightValue = map(lightValue, 0, 1023, 0, 180);
servo.write(lightValue);




  digitalWrite(11, LOW);
customKey = customKeypad.getKey();
if(customKey=='#')
change();
if (customKey)
{
password[i++]=customKey;
lcd.print(customKey);
Serial.print(customKey);


}
if(i==4)
{
delay(200);
for(int j=0;j<4;j++)
pass[j]=EEPROM.read(j);
if(!(strncmp(password, pass,4)))
{
digitalWrite(led, HIGH);


lcd.clear();


lcd.print("Accepted");
Serial.println("Accepted");
digitalWrite(11, HIGH);
delay(2000);
lcd.setCursor(0,1);
lcd.print("#Change Password");
Serial.println("#Change Password");
delay(2000);
lcd.clear();
lcd.print("Enter Password");
Serial.println("Enter Password");
lcd.setCursor(0,1);
i=0;
digitalWrite(led, LOW);
digitalWrite(leds, LOW);
}
else
{
digitalWrite(11, LOW);


digitalWrite(led, LOW);
digitalWrite(leds, HIGH);
lcd.clear();
lcd.print("WRONG PASSWORD");
Serial.println("WRONG PASSWORD");
lcd.setCursor(0,1);
lcd.print("#Change Password");


Serial.println("#Change Password");
delay(2000);
lcd.clear();
lcd.print("Enter Password:");
Serial.println("Enter Password:");
lcd.setCursor(0,1);
i=0;


digitalWrite(led, LOW);
digitalWrite(leds, LOW);
}
}
}
void change()
{
int j=0;
lcd.clear();
lcd.print("Enter Curr Pass");
Serial.println("Enter Curr Pass");
lcd.setCursor(0,1);
while(j<4)
{
char key=customKeypad.getKey();
if(key)
{
pass1[j++]=key;
lcd.print(key);


Serial.print(key);


}
key=0;
}
delay(500);


if((strncmp(pass1, pass, 4)))
{
lcd.clear();
lcd.print("WRONG PASSWORD...");
Serial.println("WRONG PASSWORD...");
lcd.setCursor(0,1);
lcd.print("Try Again");
Serial.println("Try Again");
delay(1000);
}
else
{
j=0;
lcd.clear();
lcd.print("Enter New Pass:");
Serial.println("Enter New Pass:");
lcd.setCursor(0,1);
while(j<4)
{
char key=customKeypad.getKey();


if(key)
{
pass[j]=key;
lcd.print(key);
Serial.print(key);
EEPROM.write(j,key);
j++;


}
}
lcd.print("Success..");
Serial.println("Success..");
delay(1000);
}
lcd.clear();
lcd.print("Enter Password:");
Serial.println("Enter Password:");
lcd.setCursor(0,1);
customKey=0;
}

ballscrewbob

#1
Nov 22, 2020, 04:53 pm Last Edit: Nov 22, 2020, 04:54 pm by ballscrewbob
@hbugrahan

Your topic was Moved  to it's current location / section as it is more suitable.

Posting code like that puts people off helping.
You were directed to a basic readme on entry to the forum !

Could you also take a few moments to Learn How To Use The Forum.

Other general help and troubleshooting advice can be found here.
It will help you get the best out of the forum in the future.


It may not be the answer you were looking for but its the one I am giving based on either experience, educated guess, google (who would have thunk it ! ) or the fact that you gave nothing to go with in the first place so I used my wonky crystal ball.

johnwasser

Code: [Select]
byte rowPins[ROWS] = {A0, A1, A2, 15};
byte colPins[COLS] = {10, A5, 3};


What Arduino are you using?  On an Arduino UNO, Pin 15 is the same as Pin A1 so that would mess up your keypad.

Code: [Select]
int m11;
int m12;

  pinMode(m11, OUTPUT);
  pinMode(m12, OUTPUT);

Global variables default to zero so here you are setting Pin 0 (one of the Serial pins) to OUTPUT, twice.  That will not be good for Serial.

The rest of the code doesn't look too bad. What isn't working as you expected?

You seem to be using pins 11, 12, and 13 for output.  You should probably give them better names than '11', 'led', and 'leds'.  Also, 'i' is a bad name for a global variable.  Also 'password', 'pass', and 'pass1' are bad names for your three password buffers.  The name gives no indication of what each buffer is used for.
Send Bitcoin tips to: 1G2qoGwMRXx8az71DVP1E81jShxtbSh5Hp
See who has no social life: https://forum.arduino.cc/index.php?action=stats :)

Go Up