//0 = off, and 1 = on
//00111010 01101000 01110001 (code)
//so this is just a safe, but instead of using matrix keypad, I used DIP switches, 0, or 1.
#include <LiquidCrystal_I2C.h>
#include <Servo.h>
// initialize the library with the numbers of the interface pins
LiquidCrystal_I2C lcd(0x27, 16, 2);
Servo LockL;
Servo LockM;
Servo LockR;
int openio = false;
int resetio = false;
int lockA = false;
int lockB = false;
int lockC = false;
bool i2CAddrTest(uint8_t addr) {
Wire.begin();
Wire.beginTransmission(addr);
if (Wire.endTransmission() == 0) {
return true;
}
return false;
}
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(12, INPUT);
pinMode(11, INPUT);
pinMode(10, INPUT);
pinMode(9, INPUT);
pinMode(8, INPUT);
pinMode(7, INPUT);
pinMode(6, INPUT);
pinMode(5, INPUT);
pinMode(4, INPUT);
pinMode(3, INPUT);
pinMode(2, INPUT);
pinMode(1, INPUT);
pinMode(0, INPUT);
pinMode(14, INPUT);
pinMode(15, INPUT);
pinMode(16, INPUT);
pinMode(17, INPUT);
pinMode(18, INPUT);
pinMode(19, INPUT);
pinMode(20, INPUT);
pinMode(21, INPUT);
pinMode(22, INPUT);
pinMode(23, INPUT);
pinMode(24, INPUT);
pinMode(25, INPUT);
pinMode(26, OUTPUT);
if (!i2CAddrTest(0x27)) {
lcd = LiquidCrystal_I2C(0x3F, 16, 2);
}
lcd.init(); // initialize the lcd
lcd.backlight(); // Turn on backlight
lcd.setCursor(0,0);
lcd.print("Seb's Custom Safe");// Print a message to the LCD
lcd.setCursor(0,1);
lcd.print("v1.0");// Print a message to the LCD
delay(2000);
lcd.clear();
resetio = false;
LockL.attach(44);
LockM.attach(45);
LockR.attach(46);
LockL.write(90);
LockM.write(90);
LockR.write(90);
}
void loop() {
// put your main code here, to run repeatedly:
//00111010 01101000 01110001
int A1 = digitalRead(12);
int A2 = digitalRead(11);
int A3 = digitalRead(10);
int A4 = digitalRead(9);
int A5 = digitalRead(8);
int A6 = digitalRead(7);
int A7 = digitalRead(6);
int A8 = digitalRead(5);
int D1 = digitalRead(4);
int B2 = digitalRead(3);
int B3 = digitalRead(2);
int B4 = digitalRead(32);
int B5 = digitalRead(30);
int B6 = digitalRead(29);
int B7 = digitalRead(15);
int B8 = digitalRead(28);
int C1 = digitalRead(17);
int C2 = digitalRead(31);
int C3 = digitalRead(19);
int C4 = digitalRead(35);
int C5 = digitalRead(36);
int C6 = digitalRead(22);
int C7 = digitalRead(23);
int C8 = digitalRead(24);
int tct = digitalRead(25);
int close = digitalRead(34);
int devswt = digitalRead(37);
Serial.print(A1);
Serial.print(A2);
Serial.print(A3);
Serial.print(A4);
Serial.print(A5);
Serial.print(A6);
Serial.print(A7);
Serial.print(A8);
Serial.print(" ");
Serial.print(D1);
Serial.print(B2);
Serial.print(B3);
Serial.print(B4);
Serial.print(B5);
Serial.print(B6);
Serial.print(B7);
Serial.print(B8);
Serial.print(" ");
Serial.print(openio);
Serial.print(" ");
Serial.print(C1);
Serial.print(C2);
Serial.print(C3);
Serial.print(C4);
Serial.print(C5);
Serial.print(C6);
Serial.print(C7);
Serial.print(C8);
Serial.print(" ");
Serial.print(lockA);
Serial.print(" ");
Serial.print(lockB);
Serial.print(" ");
Serial.println(lockC);
lcd.setCursor(0,1);
lcd.print(A1);
lcd.print(A2);
lcd.print(A3);
lcd.print(A4);
lcd.print(A5);
lcd.print(A6);
lcd.print(A7);
lcd.print(A8);
lcd.setCursor(12,1);
lcd.print(B1);
lcd.print(B2);
lcd.print(B3);
lcd.print(B4);
lcd.print(B5);
lcd.print(B6);
lcd.print(B7);
lcd.print(B8);
lcd.setCursor(0,2);
lcd.print(C1);
lcd.print(C2);
lcd.print(C3);
lcd.print(C4);
lcd.print(C5);
lcd.print(C6);
lcd.print(C7);
lcd.print(C8);
if(A1 == LOW && A2 == LOW && A3 == HIGH && A4 == HIGH && A5 == HIGH && A6 == LOW && A7 == HIGH && A8 == LOW){
lockA = true;
} else {
lockA = false;
}
if(D1 == LOW && B2 == HIGH && B3 == HIGH && B4 == LOW && B5 == HIGH && B6 == LOW && B7 == LOW && B8 == LOW){
lockB = true;
} else {
lockB = false;
}
if(C1 == LOW && C2 == HIGH && C3 == HIGH && C4 == HIGH && C5 == LOW && C6 == LOW && C7 == LOW && C8 == HIGH){
lockC = true;
} else {
lockC = false;
}
//00111010 01101000 01110001
if(devswt == HIGH) {
lockA = true;
lockB = true;
lockC = true;
} else {
lockA = false;
lockB = false;
lockC = false;
}
if(lockA == true && lockB == true && lockC == true && tct == HIGH) {
openio = true;
resetio = true;
lcd.setCursor(0,0);
lcd.print("Input Correct... Unlocking the Locks.");
} else if(resetio == true){
openio = true;
} else if(lockA == false && lockB == true && lockC == true && tct == HIGH) {
lcd.setCursor(0,0);
lcd.print("Input Incorrect... Try again. (Please reset)");
openio = false;
delay(1000);
lcd.clear();
} else if(lockA == true && lockB == false && lockC == true && tct == HIGH) {
lcd.setCursor(0,0);
lcd.print("Input Incorrect... Try again. (Please reset)");
openio = false;
delay(1000);
lcd.clear();
} else if(lockA == true && lockB == true && lockC == false && tct == HIGH) {
lcd.setCursor(0,0);
lcd.print("Input Incorrect... Try again. (Please reset)");
openio = false;
delay(1000);
lcd.clear();
} else if(lockA == false && lockB == false && lockC == true && tct == HIGH) {
lcd.setCursor(0,0);
lcd.print("Input Incorrect... Try again. (Please reset)");
openio = false;
delay(1000);
lcd.clear();
} else if(lockA == false && lockB == true && lockC == false && tct == HIGH) {
lcd.setCursor(0,0);
lcd.print("Input Incorrect... Try again. (Please reset)");
openio = false;
delay(1000);
lcd.clear();
} else if(lockA == false && lockB == false && lockC == false && tct == HIGH) {
lcd.setCursor(0,0);
lcd.print("Input Incorrect... Try again. (Please reset)");
openio = false;
delay(1000);
lcd.clear();
} else {
openio = false;
}
if(openio == true) {
digitalWrite(26, HIGH);
LockL.write(0);
LockM.write(0);
LockR.write(0);
} else {
lcd.setCursor(0,0);
lcd.print("Input Standby...");
}
if(lockA == false && lockB == false && lockC == false && openio == true && close == HIGH) {
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Locking.");
digitalWrite(26, LOW);
delay(150);
digitalWrite(26, HIGH);
delay(150);
digitalWrite(26, LOW);
delay(150);
digitalWrite(26, HIGH);
delay(150);
digitalWrite(26, LOW);
delay(150);
digitalWrite(26, HIGH);
delay(150);
digitalWrite(26, LOW);
delay(150);
digitalWrite(26, HIGH);
delay(150);
digitalWrite(26, LOW);
delay(2000);
resetio = false;
LockL.write(90);
LockM.write(90);
LockR.write(90);
lcd.clear();
digitalWrite(33, HIGH);
} else if(lockA == true && lockB == true && lockC == true && openio == true && close == HIGH) {
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Please set all... switches to 0.");
}
}