DOOR AUTOMATION

hyy
m trying to develop a password based door automation.

I am trying to code with out keypad and password library.

Can anyone help me out

Hi,

Soumya_12:
hyy
m trying to develop a password based door automation.

I am trying to code with out keypad and password library.

Why don't you want to use the libraries?
Tom... :slight_smile:

Using library i can write the code,
but without using them i want to write so that I can learn more

OK, post your code , and ideas for functionality - then we can see where to push you along.

Idea #1
Keypad could be a matrix (like the standard library)
or
Idea #2
Keypad could be string of switches & resistors on an analog input pin

Where did you get your invisible dog?

Try a couple of Atmel Application Notes for ideas:
http://www.atmel.com/images/doc8013.pdf
http://www.atmel.com/images/doc1231.pdf
http://www.atmel.com/images/doc1232.pdf
http://www.atmel.com/images/doc2669.pdf

Hi,

Can you please post a copy of your sketch, using code tags?
They are made with the </> icon in the reply Menu.
See section 7 http://forum.arduino.cc/index.php/topic,148850.0.html

You haven’t said if your code works or not?

Tom… :slight_smile:

#include<LiquidCrystal.h>
#define p_length 4
char keyScan();


int m=0;
int k=0;


int r1=13;
int r2=12;
int r3=11;
int r4=10;

int c1=9;
int c2=8;
int c3=7;
int c4=6;

LiquidCrystal lcd(A0, A1, A2, A3, A4, A5);
char Data[p_length];
char pin[p_length] = "1234";
char pinentered;
int i;



void clearData()
{
    while(m!=0)
    {   
           // This can be used for any array size, 
           Data[m--] = 0; //clear array for new data
    }
    return;
}


void setup()
{
        Serial.begin(9600);
        pinMode(r1,OUTPUT);
        pinMode(r2,OUTPUT);
        pinMode(r3,OUTPUT);
        pinMode(r4,OUTPUT);
      
        pinMode(c1,INPUT);
        pinMode(c2,INPUT);
        pinMode(c3,INPUT);
        pinMode(c4,INPUT);
        
        lcd.begin(20, 4);

        lcd.setCursor(5,0);
        lcd.print("**WELCOME**");
        
        lcd.setCursor(2,1);
        lcd.print("Enter the Password");
  
}


void loop()
{
       
        for(i=0;i<4;i++)
        {
            Data[i]= keyScan();
        }

       // k=0;m=0;
       /* for(i=0;i<4;i++)
        {
          if(pinentered[i]==pin[i])
          k++;
          if(pinentered[i]!=pin[i])
          m++;
        }*/

        if(pinentered)
        {
          Data[m] = pinentered;       // store char into data array
            lcd.setCursor((m+7),2);    // move cursor to show each new char
            lcd.print(Data[m]);        // print char at said cursor
            m++;
        }

      //  lcd.setCursor(1,3);
        
        
        //if(k==0)
        /*if (pinentered[i]==0)
        {
       lcd.print("enter Password");
        }
        //else if (k==4)
       else if (pinentered[i]==4)
       {
       lcd.print("correct Password");
       }    
      // else if (k==4)
        else if (pinentered[i]>1)
       {
       lcd.print("incorrect Password");
       }    
       clear(); 
        lcd.clear(); 
       
}*/

if(m == p_length-1)      // if the array index is equal to the number of expected chars, compare data to master
  {
    

        if(!strcmp(Data, k)) // equal to (strcmp(Data, Master) == 0)
        {
              lcd.setCursor(4, 3);    
              lcd.print("ACCEPTED");
        }
        else
        {
              lcd.setCursor(1, 3);
              lcd.print("LOCKED");
        }
        delay(1000);
        clearData();
        lcd.clear();
  }


char keyScan()
{
      lcd.setCursor(3,2);
      //setting the columns as high initially
      digitalWrite(c1,HIGH);
      digitalWrite(c2,HIGH);
      digitalWrite(c3,HIGH);
      digitalWrite(c4,HIGH);
      
      //case 1: r0w1 =0 while other rows as 1
      digitalWrite(r1,LOW);
      digitalWrite(r2,HIGH);
      digitalWrite(r3,HIGH);
      digitalWrite(r4,HIGH);
      //checking each column for row1 one by one
      if(digitalRead(c1)==0)
      {       
          
           lcd.write('*');
           return '0';
      }
      if(digitalRead(c2)==0)
      {
        
           lcd.write('*');
           return '0';
      }
      if(digitalRead(c3)==0)
      {
             lcd.write('*');
             return '0';
      }
      if(digitalRead(c4)==0)
      {
             lcd.write('*');
             return '0';
      }
      
       //case 2: r0w2 =0 while other rows as 1
      digitalWrite(r1,HIGH);
      digitalWrite(r2,LOW);
      digitalWrite(r3,HIGH);
      digitalWrite(r4,HIGH);
      //checking each column for row2 one by one
      if(digitalRead(c1)==0)
      {
        delay(700);
             Serial.println("4 is Pressed");
                lcd.setCursor(7,2);
             lcd.write('*');
             return '4';
      }
      if(digitalRead(c2)==0)
      {
            lcd.write('*');
             return '0';
      }
      if(digitalRead(c3)==0)
      {
            lcd.write('*');
             return '0';
      }
      if(digitalRead(c4)==0)
      {
            lcd.write('*');
             return '0';
      }
      
      //case 3: r0w3 =0 while other rows as 1
      digitalWrite(r1,HIGH);
      digitalWrite(r2,HIGH);
      digitalWrite(r3,LOW);
      digitalWrite(r4,HIGH);
      //checking each column for row3 one by one
      if(digitalRead(c1)==0)
      {
         delay(700);
          Serial.println("1 is Pressed");
             lcd.setCursor(4,2);
            lcd.write('*');
             return '1';
      }
      if(digitalRead(c2)==0)
      {
         delay(700);
        Serial.println("2 is Pressed");
           lcd.setCursor(5,2);
            lcd.write('*');
             return '2';
      }
      if(digitalRead(c3)==0)
      {
         delay(700);
        Serial.println("3 is Pressed");
           lcd.setCursor(6,2);
            lcd.write('*');
             return '3';
      }
      if(digitalRead(c4)==0)
      {
           lcd.write('*');
             return '0';
      }
      
      //case 4: r0w4 =0 while other rows as 1
      digitalWrite(r1,HIGH);
      digitalWrite(r2,HIGH);
      digitalWrite(r3,HIGH);
      digitalWrite(r4,LOW);
      //checking each column for row4 one by one
      if(digitalRead(c1)==0)
      {
           lcd.write('*');
             return '0';
      }
      if(digitalRead(c2)==0)
      {
            lcd.write('*');
             return '0';
      }
      if(digitalRead(c3)==0)
      {
            lcd.write('*');
             return '0';
      }
      if(digitalRead(c4)==0)
      {
            lcd.write('*');
             return '0';
      }
      
}
#include<LiquidCrystal.h>
#define p_length 4
char keyScan();


int m=0;
int k=0;


int r1=13;
int r2=12;
int r3=11;
int r4=10;

int c1=9;
int c2=8;
int c3=7;
int c4=6;

LiquidCrystal lcd(A0, A1, A2, A3, A4, A5);
char Data[p_length];
char pin[p_length] = "1234";
char pinentered;
int i;



void clearData()
{
    while(m!=0)
    {   
           // This can be used for any array size, 
           Data[m--] = 0; //clear array for new data
    }
    return;
}


void setup()
{
        Serial.begin(9600);
        pinMode(r1,OUTPUT);
        pinMode(r2,OUTPUT);
        pinMode(r3,OUTPUT);
        pinMode(r4,OUTPUT);
      
        pinMode(c1,INPUT);
        pinMode(c2,INPUT);
        pinMode(c3,INPUT);
        pinMode(c4,INPUT);
        
        lcd.begin(20, 4);

        lcd.setCursor(5,0);
        lcd.print("**WELCOME**");
        
        lcd.setCursor(2,1);
        lcd.print("Enter the Password");
  
}


void loop()
{
       
        for(i=0;i<4;i++)
        {
            Data[i]= keyScan();
        }

       // k=0;m=0;
       /* for(i=0;i<4;i++)
        {
          if(pinentered[i]==pin[i])
          k++;
          if(pinentered[i]!=pin[i])
          m++;
        }*/

        if(pinentered)
        {
          Data[m] = pinentered;       // store char into data array
            lcd.setCursor((m+7),2);    // move cursor to show each new char
            lcd.print(Data[m]);        // print char at said cursor
            m++;
        }

      //  lcd.setCursor(1,3);
        
        
        //if(k==0)
        /*if (pinentered[i]==0)
        {
       lcd.print("enter Password");
        }
        //else if (k==4)
       else if (pinentered[i]==4)
       {
       lcd.print("correct Password");
       }    
      // else if (k==4)
        else if (pinentered[i]>1)
       {
       lcd.print("incorrect Password");
       }    
       clear(); 
        lcd.clear(); 
       
}*/

if(m == p_length-1)      // if the array index is equal to the number of expected chars, compare data to master
  {
    

        if(!strcmp(Data, k)) // equal to (strcmp(Data, Master) == 0)
        {
              lcd.setCursor(4, 3);    
              lcd.print("ACCEPTED");
        }
        else
        {
              lcd.setCursor(1, 3);
              lcd.print("LOCKED");
        }
        delay(1000);
        clearData();
        lcd.clear();
  }


char keyScan()
{
      lcd.setCursor(3,2);
      //setting the columns as high initially
      digitalWrite(c1,HIGH);
      digitalWrite(c2,HIGH);
      digitalWrite(c3,HIGH);
      digitalWrite(c4,HIGH);
      
      //case 1: r0w1 =0 while other rows as 1
      digitalWrite(r1,LOW);
      digitalWrite(r2,HIGH);
      digitalWrite(r3,HIGH);
      digitalWrite(r4,HIGH);
      //checking each column for row1 one by one
      if(digitalRead(c1)==0)
      {       
          
           lcd.write('*');
           return '0';
      }
      if(digitalRead(c2)==0)
      {
        
           lcd.write('*');
           return '0';
      }
      if(digitalRead(c3)==0)
      {
             lcd.write('*');
             return '0';
      }
      if(digitalRead(c4)==0)
      {
             lcd.write('*');
             return '0';
      }
      
       //case 2: r0w2 =0 while other rows as 1
      digitalWrite(r1,HIGH);
      digitalWrite(r2,LOW);
      digitalWrite(r3,HIGH);
      digitalWrite(r4,HIGH);
      //checking each column for row2 one by one
      if(digitalRead(c1)==0)
      {
        delay(700);
             Serial.println("4 is Pressed");
                lcd.setCursor(7,2);
             lcd.write('*');
             return '4';
      }
      if(digitalRead(c2)==0)
      {
            lcd.write('*');
             return '0';
      }
      if(digitalRead(c3)==0)
      {
            lcd.write('*');
             return '0';
      }
      if(digitalRead(c4)==0)
      {
            lcd.write('*');
             return '0';
      }
      
      //case 3: r0w3 =0 while other rows as 1
      digitalWrite(r1,HIGH);
      digitalWrite(r2,HIGH);
      digitalWrite(r3,LOW);
      digitalWrite(r4,HIGH);
      //checking each column for row3 one by one
      if(digitalRead(c1)==0)
      {
         delay(700);
          Serial.println("1 is Pressed");
             lcd.setCursor(4,2);
            lcd.write('*');
             return '1';
      }
      if(digitalRead(c2)==0)
      {
         delay(700);
        Serial.println("2 is Pressed");
           lcd.setCursor(5,2);
            lcd.write('*');
             return '2';
      }
      if(digitalRead(c3)==0)
      {
         delay(700);
        Serial.println("3 is Pressed");
           lcd.setCursor(6,2);
            lcd.write('*');
             return '3';
      }
      if(digitalRead(c4)==0)
      {
           lcd.write('*');
             return '0';
      }
      
      //case 4: r0w4 =0 while other rows as 1
      digitalWrite(r1,HIGH);
      digitalWrite(r2,HIGH);
      digitalWrite(r3,HIGH);
      digitalWrite(r4,LOW);
      //checking each column for row4 one by one
      if(digitalRead(c1)==0)
      {
           lcd.write('*');
             return '0';
      }
      if(digitalRead(c2)==0)
      {
            lcd.write('*');
             return '0';
      }
      if(digitalRead(c3)==0)
      {
            lcd.write('*');
             return '0';
      }
      if(digitalRead(c4)==0)
      {
            lcd.write('*');
             return '0';
      }
      
}

Ok, so youre keen on using a scanned key matrix.

Probably the best place to look for how that should work is inside the existing keypad library.
The techniques are exactly what you need to implement in your own code.

Get the basics working - as you are already doing, then you may want to explore non-blocking code methods so you can timeout or do other things.