項(xiàng)目背景
在物聯(lián)網(wǎng)時(shí)代,隨著智能家居、智能安防的發(fā)展,智能門鎖在近幾年快速普及。作為智慧家庭入口,讓人們的生活方式從繁到簡(jiǎn),在保障人身及財(cái)產(chǎn)安全之外,也為用戶帶來更加舒適的智慧家居體驗(yàn)。
在5天的線上學(xué)習(xí)之后,我們小組基本上了解了星火1號(hào),在全組的一致肯定之后,我們決定利用星火1號(hào),完成硬件搭建及測(cè)試,編寫程序,實(shí)現(xiàn)智能密碼鎖功能,如按鍵模式等等。
方案理念
通過RT-Thread的軟件系統(tǒng)的示例工程,讓我們更方便、更快捷的開發(fā)代碼,節(jié)省開發(fā)時(shí)間。我們購(gòu)買了薄膜按鍵,通過對(duì)產(chǎn)品的認(rèn)知,編寫了代碼在RT-Thread上來將薄膜按鍵和星火1號(hào)板連接起來。
我們重點(diǎn)實(shí)現(xiàn)了密碼鎖的按鍵模式。實(shí)現(xiàn)了4位密碼的輸入,當(dāng)密碼輸入正確,星火1號(hào)的顯示屏上將顯示“welcome”,當(dāng)密碼輸入錯(cuò)誤的時(shí)候,你可以重新輸入,連續(xù)五次密碼輸入錯(cuò)誤,密碼鎖將鎖定一段時(shí)間,不能再次輸入密碼,使得密碼鎖的安全性得到提升。
我們小組已經(jīng)基本實(shí)現(xiàn)上述功能。
項(xiàng)目框架圖:
過程論述
硬件結(jié)構(gòu)圖:
圖1:鍵盤電路圖
設(shè)計(jì)過程
通過杜邦線將薄膜鍵盤與星火1號(hào)板連接起來,通過RT-Tread軟件編寫程序。通過對(duì)輸入線的高、低電位的判斷,在用if語句來排列出0到9,和確定按鍵。
在主體程序中輸入密碼鎖的4位密碼,再通過數(shù)組記錄按鍵輸入的4位數(shù)字,與密碼鎖內(nèi)部存儲(chǔ)的靜態(tài)數(shù)組的密碼相比對(duì),再按壓“#”符號(hào),確認(rèn)輸入的數(shù)字,如果輸入4個(gè)數(shù)字與密碼鎖的密碼的相同,則顯示屏上顯示“welcome”;如果不相同,則可以重新輸入。
在輸入的五次循環(huán)且輸入錯(cuò)誤之后,程序?qū)㈥P(guān)閉,人員將不能再通過按鍵輸入數(shù)字。等待10秒之后(時(shí)間可以通過軟件系統(tǒng)調(diào)節(jié)),才能重新通過按鍵輸入數(shù)字,再重新對(duì)比。
程序編寫
項(xiàng)目主要通過兩個(gè)數(shù)組的不斷比對(duì)實(shí)現(xiàn)密碼的識(shí)別功能。
int stored[4]={2,5,8,0};
int temp[4]={0};
密碼比對(duì):
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!");
}
}
額外功能:
當(dāng)每次按下案件的時(shí)候都能夠發(fā)出蜂鳴聲,這是通過添加一個(gè)蜂鳴器的線程來實(shí)現(xiàn)的。
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);
}
}
當(dāng)輸入五次錯(cuò)誤密碼以后通過添加一個(gè)線程實(shí)現(xiàn)一次10s的延遲以達(dá)到鎖定密碼鎖的目的,同時(shí)也確保每輸入五次錯(cuò)誤密碼后都會(huì)進(jìn)行一次上述操作。
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();
}
}
}
實(shí)現(xiàn)效果
密碼輸入
未輸入狀態(tài):
輸入狀態(tài):
成功進(jìn)入:
報(bào)告密碼錯(cuò)誤:
密碼鎖因輸入多次錯(cuò)誤密碼而被鎖定:
-
密碼鎖
+關(guān)注
關(guān)注
6文章
249瀏覽量
34932 -
LCD屏
+關(guān)注
關(guān)注
0文章
122瀏覽量
15368 -
智能家居
+關(guān)注
關(guān)注
1926文章
9471瀏覽量
183877 -
蜂鳴器
+關(guān)注
關(guān)注
12文章
888瀏覽量
45838 -
RT-Thread
+關(guān)注
關(guān)注
31文章
1261瀏覽量
39839
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論