arduino密码3x4控制_Arduino DIY输入密码,门闩自开的数字锁

该博客介绍了如何使用Arduino创建一个数字密码锁,通过3x4键盘输入密码,伺服电机控制门的开关状态。利用EEPROM存储密码,并通过蓝牙模块与手机连接,实时显示门的状态和密码输入提示。
摘要由CSDN通过智能技术生成

#include

#include

#include

#include

int readval;

Servo myservo;

int resultvalue;

int checktime=0;

String readpassword;

String Password;

String msg;

const int buttonPin = 12;

const int ledPin =  13;

boolean firstconn;

boolean changepass;

int Doorstatus;

int Dooraddress=100;

void setup() {

if(!LBTServer.begin((uint8_t*)"Sivam_LIO"))

{

return;

}

//  writepass("123456");

Doorstatus=EEPROM.read(Dooraddress);

//  Serial.begin(9600);

pinMode(ledPin, OUTPUT);

pinMode(buttonPin, INPUT);

firstconn=false;

changepass=false;

readpassword="";

Password=readpass();

myservo.attach(9);

delay(100);

}

void servocommand()

{

if (Doorstatus==0)

{

myservo.write(0);

delay(100);

}

else

{

myservo.write(180);

delay(100);

}

}

void loop() {

uint8_t buf[1];

int bytesRead;

if(LBTServer.connected())

{

if (firstconn==false)

{

firstconn=true;

delay(200);

LBTServer.write("Hello Welcome");

delay(100);

if (Doorstatus==0)

{

LBTServer.write("Door is close");

delay(100);

LBTServer.write("Type Password to open");

delay(100);

}

else

{

LBTServer.write("Door is open");

delay(100);

LBTServer.write("Type Password to close");

delay(100);

}

}

if (digitalRead(buttonPin) == HIGH && Doorstatus==0 && changepass==false)

{

changepass=true;

LBTServer.write("Type new password");

readpassword="";

delay(100);

}

else if (digitalRead(buttonPin) == LOW && changepass==true)

{

changepass=false;

LBTServer.write("Exit from password change");

readpassword="";

delay(100);

}

while(true)

{

bytesRead = LBTServer.readBytes(buf, 1);

if(!bytesRead)

break;

readval = buf[0];

readpassword = readpassword + char(readval);

checktime=0;

//     msg = "U type -" + readpassword;

//     LBTServer.write(msg);

//      Serial.println(readpassword);

if (readpassword.length()==6)

{

if (changepass==false)

{

if (readpassword.equals(Password))

{

if (Doorstatus==0)

{

Doorstatus=1;

servocommand();

EEPROM.write(Dooraddress,1);

LBTServer.write("Door Open");

}

else

{

Doorstatus=0;

servocommand();

EEPROM.write(Dooraddress,0);

LBTServer.write("Door Close");

}

}

else

{

LBTServer.write("Invalid Password");

}

}

else

{

writepass(readpassword);

Password=readpassword;

LBTServer.write("Password Changed");

delay(100);

LBTServer.write("Remove Your hand");

delay(100);

}

readpassword="";

}

}

delay(100);

if (readpassword!="")

{

checktime=checktime+1;

if (checktime>5)

{

readpassword="";

changepass=false;

checktime=0;

LBTServer.write("Time out. Try again");

delay(100);

}

}

}

else

{

readpassword="";

firstconn=false;

changepass=false;

LBTServer.accept(5);

}

//  if (digitalRead(buttonPin) == HIGH) {

//    Serial.println(2);

//    digitalWrite(ledPin, HIGH);

//  }

//  else {

//    Serial.println(3);

//    digitalWrite(ledPin, LOW);

//  }

delay(100);

}

String readpass()

{

String mempass;

int memval;

int memadd;

mempass="";

for(int i=0;i<6;i++)

{

memadd=200+i;

memval=EEPROM.read(memadd);

if (memval>9)

{

memval=0;

}

mempass=mempass + memval;

}

return mempass;

}

void writepass(String passw)

{

String mempass;

int memval;

int memadd;

for(int i=0;i<6;i++)

{

mempass=passw.substring(i,i+1);

memval=mempass.toInt();

memadd=200+i;

EEPROM.write(memadd,memval);

}

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值