//C++ Code
// โปรแกรม Lock Somnuek Safe House ด้วย รหัสผ่าน UPDATE LED 4 ดวง (20/2/67 11:43) Solenoid ทำงาน สมบูรณ์ทั้ง Entry และ Exit
#include <Keypad.h> // the library for the 4x4 keypad
#include <LiquidCrystal_I2C.h> // the library for the i2c 1602 lcd
#include <Servo.h> // the library to control the servo motor
//#include <ezLED.h>
LiquidCrystal_I2C lcd(0x27,16,2); // gets the lcd
Servo servo;
#define Password_Length 5 // the length of the password, if the password is 4 digits long set this to 5
int Position = 0; // position of the servo
char Particular[Password_Length]; // the password length
char Specific[Password_Length] = "2424"; // the password which is called specific in the code, change this to anything you want with the numbers 0-9 and the letters A-D
byte Particular_Count = 0, Specific_Count = 0; // counts the amount of digits and and checks to see if the password is correct
char Key;
const byte ROWS = 4; // the amount of rows on the keypad
const byte COLS = 4; // the amount of columns on the keypad
char keys[ROWS][COLS] = { // sets the rowns and columns
// sets the keypad digits
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
bool SmartDoor = true; // the servo
// the pins to plug the keypad into
byte rowPins[ROWS] = {7, 6, 5, 4};
byte colPins[COLS] = {3, 2, 1, 0};
Keypad myKeypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS); // gets the data from the keypad
// locked charcater
byte Locked[8] = {
B01110,
B10001,
B10001,
B11111,
B11011,
B11011,
B11011,
B11111
};
// open character
byte Opened[8] = {
B01110,
B00001,
B00001,
B11111,
B11011,
B11011,
B11011,
B11111
};
int relay = 11; //Relay เปิดกลอนประตูไฟฟ้า
int ledtrue = 13; // LED สีเขียว แสดงการป้อนรหัสผ่านถูกต้อง
int ledwrong = 9; // LED สีแดง แสดงการป้อนรหัสผ่านผิด
int Exit_switch =12; // Switch เปิดกลอนประตูไฟฟ้าออกจากห้อง
int Myroom;
void setup()
{
pinMode(relay, OUTPUT);
pinMode(ledtrue, OUTPUT);
pinMode(ledwrong, OUTPUT);
pinMode(Exit_switch, INPUT_PULLUP);
servo.attach(10); // attaches the servo to pin 10
lcd.init(); // initializes the lcd
lcd.backlight(); // turns on the backlight
lcd.setCursor(0,0); // sets the cursor on the lcd
lcd.print("wutSafeHouse"); // prints the text/character
lcd.setCursor(0,3); // sets the cursor on the lcd
lcd.print("System Lock!!!!!"); // prints text
delay(2000); // waits 2 seconds
lcd.clear(); // clears the lcd display
}
void loop()
{
if (SmartDoor == 0) // opens the smart door
{
Key = myKeypad.getKey(); // the word key = myKeypad which gets the value
if (Key == '#') // when the '#' key is pressed
{
digitalWrite(ledtrue, 0);
lcd.clear(); // clears the lcd diplay
lcd.setCursor(2,0); // sets the cursor on the lcd
lcd.print("Door Closed"); // prints the text to the lcd
lcd.createChar(0, Locked); // prints the locked character
lcd.setCursor(14,0); // sets the cursor on the lcd
lcd.write(0); // prints the first character when you are on the door closed page
delay(3000); // waits 3 seconds
SmartDoor = 1; // closes the door
}
}
else Open(); // keeps the door open
Exit_Myroom(); // Exit My Room
}
void clearData() // clears the data
{
while (Particular_Count != 0) // counts the digits pressed
{
Particular[Particular_Count--] = 0; // counts how many digits
}
return; // returns the data
}
void Exit_Myroom() // function Exit My Room
{
Myroom = digitalRead(Exit_switch);
if (!Myroom){
digitalWrite(relay,HIGH);
delay(10000);
digitalWrite(relay, LOW);
}
}
void Open() // function declarations
{
lcd.setCursor(1,0); // sets the cursor on the lcd
lcd.print("Enter Password:"); // prints the text
Key = myKeypad.getKey(); // gets the keys you press from the keypad
if (Key)
{
Particular[Particular_Count] = Key;
lcd.setCursor(Particular_Count, 1); // sets the cursor on the lcd
lcd.print("$"); // prints '*' instead of the password
Particular_Count++; // counts the length of the password
}
if (Particular_Count == Password_Length - 1) // gets the length of the password
{
if (!strcmp(Particular, Specific)) // counts the length and checks to see if the password is correct
{
lcd.clear();
lcd.setCursor(2,0); // sets the cursor on the lcd
lcd.print("Door Opened");
digitalWrite(ledtrue, 1);
digitalWrite(relay, HIGH);
delay(10000);
digitalWrite(relay, LOW);
digitalWrite(ledtrue, 0);
lcd.createChar(1, Opened);
lcd.setCursor(14,0); // sets the cursor on the lcd
lcd.write(1);
lcd.setCursor(0,1); // sets the cursor on the lcd
lcd.print("Press # to Close");
SmartDoor = 0;
}
else
{
lcd.clear();
lcd.setCursor(0,0); // sets the cursor on the lcd
lcd.print("Wrong Password"); // prints the text/character
lcd.setCursor(0,1);
lcd.print("Try Again In");
lcd.setCursor(13,1);
lcd.print("10");
digitalWrite(ledwrong, 1);
delay(1000);
lcd.setCursor(13,1);
lcd.print("09");
digitalWrite(ledwrong, 1);
delay(1000);
lcd.setCursor(13,1);
lcd.print("08");
digitalWrite(ledwrong, 1);
delay(1000);
lcd.setCursor(13,1);
lcd.print("07");
digitalWrite(ledwrong, 1);
delay(1000);
lcd.setCursor(13,1);
lcd.print("06");
digitalWrite(ledwrong, 1);
delay(1000);
lcd.setCursor(13,1);
lcd.print("05");
digitalWrite(ledwrong, 1);
delay(1000);
lcd.setCursor(13,1);
lcd.print("04");
digitalWrite(ledwrong, 1);
delay(1000);
lcd.setCursor(13,1);
lcd.print("03");
digitalWrite(ledwrong, 1);
delay(1000);
lcd.setCursor(13,1);
lcd.print("02");
digitalWrite(ledwrong, 1);
delay(1000);
lcd.setCursor(13,1);
lcd.print("01");
digitalWrite(ledwrong, 1);
delay(1000);
lcd.setCursor(13,1);
lcd.print("00");
digitalWrite(ledwrong, 1);
delay(1000);
lcd.clear();
SmartDoor = 1; // closes the smart door
digitalWrite(ledwrong, 0);
}
clearData(); // clears the data
}
}