电子说
项目背景
在物联网时代,随着智能家居、智能安防的发展,智能门锁在近几年快速普及。作为智慧家庭入口,让人们的生活方式从繁到简,在保障人身及财产安全之外,也为用户带来更加舒适的智慧家居体验。
在5天的线上学习之后,我们小组基本上了解了星火1号,在全组的一致肯定之后,我们决定利用星火1号,完成硬件搭建及测试,编写程序,实现智能密码锁功能,如按键模式等等。
方案理念
通过RT-Thread的软件系统的示例工程,让我们更方便、更快捷的开发代码,节省开发时间。我们购买了薄膜按键,通过对产品的认知,编写了代码在RT-Thread上来将薄膜按键和星火1号板连接起来。
我们重点实现了密码锁的按键模式。实现了4位密码的输入,当密码输入正确,星火1号的显示屏上将显示“welcome”,当密码输入错误的时候,你可以重新输入,连续五次密码输入错误,密码锁将锁定一段时间,不能再次输入密码,使得密码锁的安全性得到提升。
我们小组已经基本实现上述功能。
项目框架图:
过程论述
硬件结构图:
图1:键盘电路图
设计过程
通过杜邦线将薄膜键盘与星火1号板连接起来,通过RT-Tread软件编写程序。通过对输入线的高、低电位的判断,在用if语句来排列出0到9,和确定按键。
在主体程序中输入密码锁的4位密码,再通过数组记录按键输入的4位数字,与密码锁内部存储的静态数组的密码相比对,再按压“#”符号,确认输入的数字,如果输入4个数字与密码锁的密码的相同,则显示屏上显示“welcome”;如果不相同,则可以重新输入。
在输入的五次循环且输入错误之后,程序将关闭,人员将不能再通过按键输入数字。等待10秒之后(时间可以通过软件系统调节),才能重新通过按键输入数字,再重新对比。
程序编写
项目主要通过两个数组的不断比对实现密码的识别功能。
int stored[4]={2,5,8,0};
int temp[4]={0};
密码比对:
if(Sub==4)
{
if(temp[0] == stored[0] && temp[1] == stored[1] && temp[2] == stored[2] && temp[3] == stored[3] && Sub==4)//
{
lcd_clear(WHITE); /* show RT-Thread logo */
lcd_show_image(0, 0, 240, 69, image_rttlogo);
lcd_set_color(WHITE, BLACK);
lcd_show_string(65, 110, 32, "Welcome!");
}
}
额外功能:
当每次按下案件的时候都能够发出蜂鸣声,这是通过添加一个蜂鸣器的线程来实现的。
static void Beep(void)
{
while(1)
{
if(Bflag == 1 && flag == 0)
{
rt_pin_write(PIN_BEEP,PIN_HIGH);
//Delay(250);
rt_thread_mdelay(100);//Beep
rt_pin_write(PIN_BEEP,PIN_LOW);
flag = 1;
}
rt_thread_mdelay(10);
}
}
当输入五次错误密码以后通过添加一个线程实现一次10s的延迟以达到锁定密码锁的目的,同时也确保每输入五次错误密码后都会进行一次上述操作。
else if (errornum >= 5)
{
lcd_clear(WHITE); /* show RT-Thread logo */
lcd_show_image(0, 0, 240, 69, image_rttlogo);
lcd_set_color(WHITE, BLACK);
lcd_show_string(65, 110, 32, "Locked!");
lockflag = 1;
}
void thread_entry(void *parameter)
{
while (1)
{
if (lockflag == 1)
{
rt_thread_mdelay(10000);
init();
}
}
}
实现效果
密码输入
未输入状态:
输入状态:
成功进入:
报告密码错误:
密码锁因输入多次错误密码而被锁定:
全部0条评论
快来发表一下你的评论吧 !