Safe lock with Arduino

Circuit Diagram of Safe lock Project with Arduino

Code for Safe Lock with Arduino:

#define CLK 9   // Pin for CLK
#define DT 10    // Pin for DT
#define SW 11    // Pin for SW
#define Red_LED A2      // Pin for Red LED
#define Green_LED A3    // Pin for Green LED
#define buttonPin A4    // Pin for the button
#define Buzzer A5       // Pin for the buzzer

// Define Connections to 74HC595 Shift Register
const int dataPin = 6; // DS pin
const int latchPin = 7; // ST_CP pin
const int clockPin = 8; // SH_CP pin

// Define Connections to BCD
int a1 = 2;
int a2 = 5;
int a3 = 4;
int a4 = 3;

// Patterns for characters 0,1,2,3,4,5,6,7,8,9,
int datArray[16] = {B11111010, B01100000, B11011100, B11110100, B01100110, B10110110, B10111110, B11100000, B11111110, B11110110};

bool P_Mode = false;
int counter = 0;
int currentStateCLK;
int lastStateCLK;
int a = 0, b = 0, c = 0;
int p1 = 2, p2 = 4, p3 = 6;
int i = 0, Try = 3;
String currentDir = "";
bool flagbtn = true, flagclk = true;
bool Start = false, Unlock = false, state = true;
unsigned long prevmls, prevmlsG;

void setup() {
  // Setup Serial Monitor
  Serial.begin(9600);
  pinMode(a1, OUTPUT);
  pinMode(a2, OUTPUT);
  pinMode(a3, OUTPUT);
  pinMode(a4, OUTPUT);
  pinMode(CLK, INPUT);
  pinMode(DT, INPUT);
  pinMode(SW, INPUT_PULLUP);
  pinMode(buttonPin, INPUT);
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
  pinMode(Red_LED, OUTPUT);
  pinMode(Green_LED, OUTPUT);
  pinMode(Buzzer, OUTPUT);
  // Read the initial state of CLK
  lastStateCLK = digitalRead(CLK);
  Turn_OFF_Display();
}

void loop() {
  Read_button(); // Check button status
  read_encoder(); // Read rotary encoder
  Update_display(a, b, c); // Update the display based on the selected digits
  Update_LEDs();  // Update the LEDs
}


//------------------------------------------------Status LEDs----------------------------
void Update_LEDs()
{
  if (Start == true)
  { if (P_Mode == false) {
      if (Unlock == true)
      { digitalWrite(Green_LED, HIGH);
        digitalWrite(Red_LED, LOW);
      }
      else
      { digitalWrite(Red_LED, HIGH);
        digitalWrite(Green_LED, LOW);
      }
    }
    else if (P_Mode == true)
    { digitalWrite(Red_LED, LOW);
      if (millis() - prevmlsG > 500)
      {
        state = !state;
        digitalWrite(Green_LED, state);
        prevmlsG = millis();
      }
    }
  }
}


//---------------------------------------------Reading Button--------------------------
void Read_button()
{
  if (digitalRead(buttonPin) == HIGH && flagbtn == true)
  { flagbtn = false;
    Start = !Start;
    prevmls = millis();
    if (Start == true)
    {
      for (int j = 0; j < 10; j++) // Display numbers 0-9 on the 7-segment display
      {
        digitalWrite(latchPin, LOW);
        shiftOut(dataPin, clockPin, MSBFIRST, datArray[j]);
        shiftOut(dataPin, clockPin, MSBFIRST, datArray[j]);
        digitalWrite(latchPin, HIGH);
        disp1(j);
        delay(50);
      }
    }
  }
  else if (digitalRead(buttonPin) == LOW && flagbtn == false)
  { flagbtn = true;
    if (millis() - prevmls > 2000)
    { Start = true;
      P_Mode = !P_Mode;
      if (P_Mode == true)
        Serial.println("Password Mode Activated!");
      else
      { Serial.println("Password Mode Deactivated!");
        p1 = a;
        p2 = b;
        p3 = c;
        Serial.println((String)"\nNew Password Saved as: " + p1 + p2 + p3 + "\n");
        a = 0; b = 0; c = 0;
      }
    }
  }
}



//-------------------------------------------------Encoder---------------------------------------
void read_encoder()
{ if (Start == true)
  {
    currentStateCLK = digitalRead(CLK);

    if (currentStateCLK != lastStateCLK  && currentStateCLK == 1) {

      if (digitalRead(DT) != currentStateCLK) {
        // Encoder is rotating CW so increment
        counter ++;
        if (counter > 9)
          counter = 0;
        currentDir = "CW";
      }
      else {
        // Encoder is rotating CCW so increment
        counter --;
        currentDir = "CCW";
        if (counter < 0)
          counter = 9;
      }

      if (i == 0)
        a = counter;
      if (i == 1)
        b = counter;
      if (i == 2)
        c = counter;
      //    Serial.print("Direction: ");    Serial.print(currentDir);
      //    Serial.print(" | Counter: ");    Serial.println(counter);
    }

    // Remember last CLK state
    lastStateCLK = currentStateCLK;

    //If we detect LOW signal, button is pressed
    if (digitalRead(SW) == LOW && flagclk == true) {
      flagclk = false;
      Serial.println("Button pressed!");
      i++;
      if (i > 2)
      { i = 0;
        if (P_Mode == false) {
          if (p1 == a && p2 == b && p3 == c)
          {
            Unlock = true;
            Serial.println("Correct Password!");
            a = 0; b = 0; c = 0;
            digitalWrite(Buzzer, HIGH);
            delay(500);
            digitalWrite(Buzzer, LOW);
            delay(500);
          }
          else
          { digitalWrite(Red_LED, HIGH);
            digitalWrite(Green_LED, LOW);

            Serial.println("Wrong Password, Try Again!");
            for (int j = 0; j < 2; j++) {
              digitalWrite(Buzzer, HIGH);
              delay(300);
              digitalWrite(Buzzer, LOW);
              delay(300);
            }

            a = 0; b = 0; c = 0;
            Try--;
            Update_display(Try, Try, Try);
            delay(1500);
            if (Try == 0)
            {
              for (int k = 0; k < 10; k++)
              {
                digitalWrite(Buzzer, HIGH);
                delay(200);
                digitalWrite(Buzzer, LOW);
                delay(200);
              }

              Start = false;
              digitalWrite(Red_LED, LOW);
              digitalWrite(Green_LED, LOW);
            }
          }
        }
      }

      delay(500);
    }
    else if (digitalRead(SW) == HIGH && flagclk == false) {
      flagclk = true;
    }
  }
}



void disp1(int num) { //this method entails making 0-9 combinations using the BCD pins by sending different outputs to turn each segment on or off.
  if (num == 0) //0000
  {
    digitalWrite(a1, LOW);
    digitalWrite(a2, LOW);
    digitalWrite(a3, LOW);
    digitalWrite(a4, LOW);
  }
  if (num == 1) //0001
  {
    digitalWrite(a1, HIGH);
    digitalWrite(a2, LOW);
    digitalWrite(a3, LOW);
    digitalWrite(a4, LOW);
  }
  if (num == 2) //0010
  {
    digitalWrite(a1, LOW);//0
    digitalWrite(a2, HIGH);//1
    digitalWrite(a3, LOW);//0
    digitalWrite(a4, LOW);//0
  }
  if (num == 3) //0011
  {
    digitalWrite(a1, HIGH);//1
    digitalWrite(a2, HIGH);//1
    digitalWrite(a3, LOW);//0
    digitalWrite(a4, LOW);//0
  }
  if (num == 4) //0100
  {
    digitalWrite(a1, LOW);//0
    digitalWrite(a2, LOW);//0
    digitalWrite(a3, HIGH);//1
    digitalWrite(a4, LOW);//0
  }
  if (num == 5) //0101
  {
    digitalWrite(a1, HIGH);//1
    digitalWrite(a2, LOW);//0
    digitalWrite(a3, HIGH);//1
    digitalWrite(a4, LOW);//0
  }
  if (num == 6) //0110
  {
    digitalWrite(a1, LOW);//0
    digitalWrite(a2, HIGH);//1
    digitalWrite(a3, HIGH);//1
    digitalWrite(a4, LOW);//0
  }
  if (num == 7) //0111
  {
    digitalWrite(a1, HIGH);//1
    digitalWrite(a2, HIGH);//1
    digitalWrite(a3, HIGH);//1
    digitalWrite(a4, LOW);//0
  }
  if (num == 8) //1000
  {
    digitalWrite(a1, LOW);//0
    digitalWrite(a2, LOW);//0
    digitalWrite(a3, LOW);//0
    digitalWrite(a4, HIGH);//1
  }
  if (num == 9) //1001
  {
    digitalWrite(a1, HIGH);//1
    digitalWrite(a2, LOW);//0
    digitalWrite(a3, LOW);//0
    digitalWrite(a4, HIGH);//1
  }

}

//------------------------Function for turning of all the 7-Segments--------------------
void Turn_OFF_Display()
{
  digitalWrite(latchPin, LOW);
  shiftOut(dataPin, clockPin, MSBFIRST, datArray[0]);
  shiftOut(dataPin, clockPin, MSBFIRST, datArray[0]);
  digitalWrite(latchPin, HIGH);
  disp1(0);
}

//-------------------------------------------Functino to update 7-Segments
void Update_display(int x, int y, int z)
{ if (Start == true) {
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, MSBFIRST, datArray[x]);
    shiftOut(dataPin, clockPin, MSBFIRST, datArray[y]);
    digitalWrite(latchPin, HIGH);
    disp1(z);

  }
}
Safe Lock with Arduino uno

Need Help in Safe lock Project Project?

If you need this Safe lock Project Project with or without Modifications or Customization then you can contact us through WhatsApp. 

Learn More about the services we offer.

1 Comment

Leave a Reply

Your email address will not be published. Required fields are marked *

Facebook
YouTube