// Garage Door Opener using servo to press remote button
//
// Correct entry of 4 digit code will illuminate the Green LED
// Incorrect entry of 4 digit code will illuminate the Red LED
//
// To change the code:
// Press the "#" button on keypad and the Blue LED will illimunate
// While Blue LED is illuminated, enter the initial password
// Correct entry will illuminate the Blue and Yellow LEDs
// Incorrect entry will illuminate the Red LED (must start over and press "#" on keypad)
// While the Blue and Yellow LEDs are illuminated, enter the new password.
// Successful change of password will illuminate the Green LED.
//
// To reset the password to 1234, press the reset button
#include<Keypad.h>
#include<EEPROM.h>
#include<Servo.h>
Servo ServoMotor;
char password[4];
char initial_password[4],new_password[4];
int i=0;
int LED_G = 14;
int LED_R = 15;
int LED_B = 16;
int LED_Y = 17;
char key_pressed=0;
const int Reset = 12;
int value1 = HIGH;
const byte rows = 4;
const byte columns = 3;
char keys[rows][columns] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
};
byte row_pins[rows] = { 7, 2, 3, 5};
byte column_pins[columns] = { 6, 8, 4};
Keypad keypad_key = Keypad( makeKeymap(keys), row_pins, column_pins, rows, columns);
//#define LED_R 10 // define red LED
//#define LED_G 11 // define green LED
void setup()
{
Serial.begin (9600);
pinMode(Reset, INPUT);
pinMode(LED_R, OUTPUT);
pinMode(LED_G, OUTPUT);
pinMode(LED_B, OUTPUT);
pinMode(LED_Y, OUTPUT);
delay(1000);
ServoMotor.attach(13);
// check if the password has been changed
if (EEPROM.read(256) != 123) { // not equal to 123
EEPROM.write(256, 123); // write value of 123 to byte 256
initialpassword(); // set first password to 1234
}
else { // if byte 256 is equal to 123
EEPROM.get (0, password); // get last password before power failure
}
}
void loop()
{
digitalWrite(LED_R, LOW);
digitalWrite(LED_G, LOW);
key_pressed = keypad_key.getKey();
value1 = digitalRead (Reset);
if (value1 == HIGH)
initialpassword();
if(key_pressed=='#')
change();
if (key_pressed)
{
password[i++]=key_pressed;
Serial.println(key_pressed);
}
if(i==4)
{
delay(200);
for(int j=0;j<4;j++)
initial_password[j]=EEPROM.read(j);
if(!(strncmp(password, initial_password,4)))
{
Serial.println("Password Accepted");
digitalWrite(LED_G, HIGH);
ServoMotor.write(78);
delay(delay);
ServoMotor.write(90);
Serial.println("Press # to change");
delay(delay);
Serial.println("Enter Password:");
i=0;
}
else
{
digitalWrite(LED_R, HIGH);
Serial.println("Wrong Password");;
Serial.println("Press # to change");
delay(delay);
Serial.println("Enter Password");
i=0;
}
}
}
void change()
{
int j=0;
Serial.println("Current Password");
digitalWrite(LED_B, HIGH);
while(j<4)
{
char key=keypad_key.getKey();
if(key)
{
new_password[j++]=key;
Serial.println(key);
}
key=0;
}
delay(delay);
if((strncmp(new_password, initial_password, 4)))
{
Serial.println("Wrong Password");
Serial.println("Try Again");
delay(200);
digitalWrite(LED_B, LOW);
digitalWrite(LED_R, HIGH);
delay(delay);
digitalWrite(LED_R, LOW);
}
else
{
j=0;
Serial.println("New Password:");
digitalWrite(LED_Y, HIGH);
while(j<4)
{
char key=keypad_key.getKey();
if(key)
{
initial_password[j]=key;
Serial.println(key);
EEPROM.write(j,key);
j++;
}
}
Serial.println("Password Changed");
delay(200);
digitalWrite(LED_B, LOW);
digitalWrite(LED_Y, LOW);
digitalWrite(LED_G, HIGH);
delay(delay);
digitalWrite(LED_G, LOW);
}
Serial.println("Enter Password");
key_pressed=0;
}
void initialpassword(){
for(int j=0;j<4;j++)
EEPROM.write(j, j+49);
for(int j=0;j<4;j++)
initial_password[j]=EEPROM.read(j);
}
Comments