gregory

hello guys…i have a project on digital door lock with changeable password, it was successful using a servo as the door gear…
i connected a switch at pin 11 for easily exit, i created a function for the switch(button()), call the function at where access is granted but servo is not responding. please i need assistance on how to make the switch work even without writing any pin…
here is the sketch…
#include <Keypad.h>
#include <VarSpeedServo.h>
VarSpeedServo myservo; // create servo
#include<LiquidCrystal.h>
#include<EEPROM.h>
int pushButton=11;
int varState=0;
LiquidCrystal lcd(12,8,7,6,5,4);
char password[4];
char pass[4],pass1[4];
int i=0;
char customKey=0;
const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns
char hexaKeys[ROWS][COLS] = {
{‘1’,‘2’,‘3’,‘A’},
{‘4’,‘5’,‘6’,‘B’},
{‘7’,‘8’,‘9’,‘C’},
{’*’,‘0’,’#’,‘D’}
};
byte rowPins[ROWS] = {A0,A1,A2,A3}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {A4,A5,3,2}; //connect to the column pinouts of the keypad
//initialize an instance of class NewKeypad
Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
int led=13;
int buzzer = 10;
//int m11;
int m12;
void setup()
{

Serial.begin(9600);
pinMode(pushButton,INPUT);
//pinMode(11, OUTPUT);
myservo.attach(9); // attaches the servo on pin 9 to the servo object
myservo.write(0);
lcd.begin(16,2);
pinMode(led, OUTPUT);
pinMode(buzzer, OUTPUT);
//pinMode(m11, OUTPUT);
pinMode(m12, OUTPUT);
lcd.print(" Electronic “);
Serial.print(” Electronic “);
lcd.setCursor(0,1);
lcd.print(” Keypad Lock “);
Serial.print(” Keypad Lock ");
delay(2000);
lcd.clear();
lcd.print(“Enter Ur Passkey:”);
Serial.println(“Enter Ur Passkey:”);
lcd.setCursor(0,1);
for(int j=0;j<4;j++)
EEPROM.write(j, j+49);
for(int j=0;j<4;j++)
pass[j]=EEPROM.read(j);

}

void loop()
{

// digitalWrite(11, HIGH);
customKey = customKeypad.getKey();
if(customKey==’#’)
change();
if (customKey)
{
password[i++]=customKey;
lcd.print(customKey);
Serial.print(customKey);
beep();
button();
}
if(i==4)
{
delay(200);
for(int j=0;j<4;j++)
pass[j]=EEPROM.read(j);
button();
if(!(strncmp(password, pass,4)))

{

digitalWrite(led, HIGH);
beep();
lcd.clear();
lcd.print(“Passkey Accepted”);
Serial.println(“Passkey Accepted”);
myservo.write(180, 100, true); // move to 180 degrees, use a speed of 30, wait until move is complete
delay(1000);
myservo.write(0, 100, true);
//digitalWrite(11, LOW);
delay(2000);
lcd.setCursor(0,1);
lcd.print("#.Change Passkey");
Serial.println("#.Change Passkey");
delay(2000);
lcd.clear();
lcd.print(“Enter Passkey:”);
Serial.println(“Enter Passkey:”);
lcd.setCursor(0,1);
i=0;
digitalWrite(led, LOW);
button();
}

else
{
//digitalWrite(11, HIGH);
digitalWrite(buzzer, HIGH);
lcd.clear();
lcd.print(“Access Denied…”);
Serial.println(“Access Denied…”);
lcd.setCursor(0,1);
lcd.print("#.Change Passkey");
Serial.println("#.Change Passkey");
delay(2000);
lcd.clear();
lcd.print(“Enter Passkey:”);
Serial.println(“Enter Passkey:”);
lcd.setCursor(0,1);
i=0;
digitalWrite(buzzer, LOW);
button();

}
}
}
void change()
{
int j=0;
lcd.clear();
lcd.print(“UR Current Passk”);
Serial.println(“UR Current Passk”);
lcd.setCursor(0,1);
while(j<4)
{
char key=customKeypad.getKey();
if(key)
{
pass1[j++]=key;
lcd.print(key);
Serial.print(key);
beep();
}
key=0;
}
delay(500);

if((strncmp(pass1, pass, 4)))
{
lcd.clear();
lcd.print(“Wrong Passkey…”);
Serial.println(“Wrong Passkey…”);
lcd.setCursor(0,1);
lcd.print(“Better Luck Again”);
Serial.println(“Better Luck Again”);
delay(1000);
button();
}

else
{

j=0;
lcd.clear();
lcd.print(“Enter New Passk:”);
Serial.println(“Enter New Passk:”);
lcd.setCursor(0,1);
while(j<4)

{
char key=customKeypad.getKey();
if(key)
{
pass[j]=key;
lcd.print(key);
Serial.print(key);
EEPROM.write(j,key);
j++;
beep();
}
}
lcd.print(" Done…");
Serial.println(" Done…");
delay(1000);
button();
}
lcd.clear();
lcd.print(“Enter Ur Passk:”);
Serial.println(“Enter Ur Passk:”);
lcd.setCursor(0,1);
customKey=0;
button();
}
void beep()
{
digitalWrite(buzzer, HIGH);
delay(20);
digitalWrite(buzzer, LOW);
}
void button()
{
varState=digitalRead(pushButton);
if(varState==HIGH)
{
myservo.write(180, 255, true); // move to 180 degrees, use a speed of 30, wait until move is complete
delay(4000);
myservo.write(0, 255, true);
}
}

…thanks

How to use this forum. With special attention to Nos. 6 & 7. Hint - both *can * be edited

I suggest you do a bit of debugging first, then identify what does not work, and then post a qualified question if you really do not understand why it does not work.

Hi, Welcome to the forum.

Please read the first post in any forum entitled how to use this forum. http://forum.arduino.cc/index.php/topic,148850.0.html . Then look down to item #7 about how to post your code. It will be formatted in a scrolling window that makes it easier to read.

Can you please post a copy of your circuit, in CAD or a picture of a hand drawn circuit in jpg, png?

How have you connected your servo? Does its power gnd connect to the Arduino gnd?

What model Arduino are you using?

Thanks.. Tom... :)