论文总字数:3689字
蓝牙电子锁硬件系统结构图
蓝牙电子锁软件系统流程图
蓝牙电子锁功能测试
蓝牙名称为Bluetoothelock,PIN码为1234、初始密码为0000,管理员密码为9999。
- 使用初始密码成功开锁,开锁提示音与提示灯正常运行,除此之外,若输入非“RESET”的数据也无法开锁,并且管理员密码也无法开锁;
- 输入“RESET”进入重置密码流程,未在5s内输入管理员密码,提示超时,接着进行输入正确密码、错误密码、重置密码等流程并无任何问题;
- 输入“RESET”进入重置密码流程,5s内输入非管理员密码,提示出错,接着进行输入正确密码、错误密码、重置密码等流程并无任何问题;
- 输入“RESET”进入重置密码流程,5s内输入管理员密码,提示5s内输入新密码,若未输入或未在规定时间内输入,提示超时,接着进行输入正确密码、错误密码、重置密码等流程并无任何问题;
- 输入“RESET”进入重置密码流程,5s内输入管理员密码,提示5s内输入新密码,规定时间内输入新密码,提示成功,接着进行输入新的正确密码、错误密码、重置密码等流程并无任何问题;
- 输入“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字
该课题毕业论文、开题报告、外文翻译、程序设计、图纸设计等资料可联系客服协助查找;