基于BlueTooth4.0的电子智能锁的设计与实现

 2022-04-15 07:04

论文总字数:3689字

蓝牙电子锁硬件系统结构图

蓝牙电子锁软件系统流程图

蓝牙电子锁功能测试

蓝牙名称为Bluetoothelock,PIN码为1234、初始密码为0000,管理员密码为9999。

  1. 使用初始密码成功开锁,开锁提示音与提示灯正常运行,除此之外,若输入非“RESET”的数据也无法开锁,并且管理员密码也无法开锁;
  2. 输入“RESET”进入重置密码流程,未在5s内输入管理员密码,提示超时,接着进行输入正确密码、错误密码、重置密码等流程并无任何问题;
  3. 输入“RESET”进入重置密码流程,5s内输入非管理员密码,提示出错,接着进行输入正确密码、错误密码、重置密码等流程并无任何问题;
  4. 输入“RESET”进入重置密码流程,5s内输入管理员密码,提示5s内输入新密码,若未输入或未在规定时间内输入,提示超时,接着进行输入正确密码、错误密码、重置密码等流程并无任何问题;
  5. 输入“RESET”进入重置密码流程,5s内输入管理员密码,提示5s内输入新密码,规定时间内输入新密码,提示成功,接着进行输入新的正确密码、错误密码、重置密码等流程并无任何问题;
  6. 输入“RESET”进入重置密码流程,5s内输入管理员密码,提示5s内输入新密码,规定时间内输入新密码“RESET”,提示失败,接着进行输入新的正确密码、错误密码、重置密码等流程并无任何问题。

经过多轮测试,达到预期功能。

代码

#include lt;Servo.hgt;

Servo myservo; // 创建舵机对象来控制舵机

String adminpassword="9999";

String password="0000";

String empty="";

void setup()

{

Serial.begin(38400);//打开串口波特率38400

myservo.attach(12); // 把连接在引脚12上的舵机赋予舵机对象

myservo.writeMicroseconds(900);//设置舵机初始角度

pinMode(3, OUTPUT);//蜂鸣器

pinMode(4, OUTPUT);//绿灯

pinMode(5, OUTPUT);//红灯

pinMode(6, OUTPUT);//黄灯

}

void loop()

{

String rx_buffer;

String reset="RESET"; //重置密码字符串

rx_buffer=Serial.readString(); //接收到的密码

if(rx_buffer.equals(password)) //密码正确

{

tonepin_on(); //开锁提示音

on(); //开锁

}

else if(rx_buffer.equals(reset))

{

reset_settings(); //接收到重置密码

}

else if(rx_buffer.equals(empty))

{

}

else { //密码错误

Serial.write("Error!");

for(int i=0;ilt;=10;i )

{

digitalWrite(5,HIGH);//红灯亮

digitalWrite(3,HIGH);//发声音

delay(50);

digitalWrite(5,LOW);//红灯灭

digitalWrite(3,LOW);//不声音

delay(50);

}

}

}

void on()

{

digitalWrite(4,HIGH);//绿灯亮

Serial.write("success");

myservo.writeMicroseconds(1500);

delay(2000);

myservo.writeMicroseconds(900);

digitalWrite(4,LOW);//绿灯灭

}

void reset_settings()

{

digitalWrite(6,HIGH);

Serial.print("Please enter the administrator's password in 5 seconds.");

unsigned long start_hold1 = millis(); // 标记时间1

int HOLD_DELAY = 5000; // 设置超时时间

while(Serial.readString()gt;0)

{

if ((millis() - start_hold1) lt;= HOLD_DELAY)

{

String rx_buffer;

rx_buffer=Serial.readString();

if(rx_buffer.equals(adminpassword))

{

Serial.write("correct!");

Serial.write("Please enter the new password in 5 seconds!");

unsigned long start_hold2 = millis(); // 标记时间2

while(true)

{

if ((millis() - start_hold2) lt;= HOLD_DELAY)

{

rx_buffer=Serial.readString();

if(!rx_buffer.equals(empty))

{

password=rx_buffer;

Serial.write("Password has been reset");

digitalWrite(6,LOW);

digitalWrite(4,HIGH);

delay(2000);

digitalWrite(4,LOW);

goto end_reset;

}

}

else

{

Serial.write("Time out!");

goto end_reset;

}

}

}

else if(rx_buffer.equals(empty))

{

}

else

{

Serial.write("ERROR!");

goto end_reset;

}

}

else {

Serial.write("Time out!");

goto end_reset;

}

}

end_reset:

digitalWrite(6,LOW);

return;

}

void tonepin_on()

{

for(int i=0;ilt;=589;i )

{

digitalWrite(3,HIGH);//发声音

delay(1);//延时1ms

digitalWrite(3,LOW);//不发声音

delay(1);//延时ms

}

}

剩余内容已隐藏,请支付后下载全文,论文总字数:3689字

您需要先支付 80元 才能查看全部内容!立即支付

该课题毕业论文、开题报告、外文翻译、程序设计、图纸设计等资料可联系客服协助查找;