WFduino第39課4×4薄膜鍵盤(密碼鎖)(原稿)
4×4薄膜鍵盤:
是一款常見的薄膜按鍵模組,由16個按鍵(開關)交織而成,4×4按鍵模組有8個接腳,分別排成列、行兩組。(註1)
圖片來源:https://swf.com.tw/images/books/arduino/keypad/keypad_4x4.png
接線圖:
——————————
一、上拉電阻原理
在Arduino上使用開關來控制電路,讀取資料時,如果直接使用[INPUT]指令輸入,常常因為受到環境雜訊的影響,會發生讀取訊號不穩定的現象(沒有動作卻有時讀取到 HIGH ,有時卻讀取到 LOW),造成讀取判斷錯誤。為了確保它在穩定的狀態,,必須接個上拉電阻或下拉電阻。(註2)
上拉電阻:
如上圖,5V接電阻(一般接10Kꭥ),再接開關、接地,中間引出接數位腳D5輸入。
使用下面積木宣告
注意:
當按鍵開關未接通時,數位腳D5讀取到高電位(1),當開關接通時,數位腳D5讀取到低電位(0)。
—————————-
內建了上拉電阻
其實arduino在數位腳位都已經內建了上拉電阻,只要使用下面的宣告[INPUT_PULLUP]
就可以取代上面的外接電阻,電路圖變成下面
接線圖:
按鍵開關可以直接接數位腳D5輸入,省去外接上拉電阻的麻煩 。
注意:
當按鍵開關未接通時,數位腳D5讀取到高電位(1),當開關接通時,數位腳D5讀取到低電位(0)。
————————–
二、測試腳位程式
以下為每一個按鍵讀取功能測試。
數位腳D4、D5、D6、D7負責供電,每一次只有一個腳位為0,就是上圖的接地。
數位腳D8、D9、D10、D11負責讀取數位訊號,就是上圖的D5。
當按下某一個按鍵時,D8、D9、D10、D11只有一個會讀取到低電位(0),其他沒有按下的按鍵都讀取到高電位(1),就可以知道是按下哪一個按鍵。
(一)按鍵147*
先設定數位腳D8、D9、D10、D11為[INPUT_PULLUP]。
[等待0.5秒],因為內定數位腳位為OUTPUT,所以每個腳位下面都要加上等待0.5秒,讓腳位可以正確改變成上拉電阻模式。
建立變數[密碼],讓按鍵的值可以顯示出來。
[同時輸出:腳位4輸出1,腳位5輸出1,腳位6輸出1,腳位7輸出0],數位腳D4、D5、D6輸出高電位(1),數位腳D7出低電位(0),就是只有第1行的按鍵[147*]按下去會接地,可以讀取到低電位(0)。
[重複無限次],檢查按鍵按下了沒有。
如果按下某一個按鍵時,D8、D9、D10、D11只有一個會讀取到低電位(0),就顯示對應的符號。
(二)按鍵2580
先設定數位腳D8、D9、D10、D11為[INPUT_PULLUP]。
[等待0.5秒],因為內定數位腳位為OUTPUT,所以每個腳位下面都要加上等待0.5秒,讓腳位可以正確改變成上拉電阻模式。
建立變數[密碼],讓按鍵的值可以顯示出來。
[同時輸出:腳位4輸出1,腳位5輸出1,腳位6輸出0,腳位7輸出1],數位腳D4、D5、D7輸出高電位(1),數位腳D6出低電位(0),就是只有第2行的按鍵[2580]按下去會接地,可以讀取到低電位(0)。
[重複無限次],檢查按鍵按下了沒有。
如果按下某一個按鍵時,D8、D9、D10、D11只有一個會讀取到低電位(0),就顯示對應的符號。
程式下載:2580.sb2
(三)按鍵369#
先設定數位腳D8、D9、D10、D11為[INPUT_PULLUP]。
[等待0.5秒],因為內定數位腳位為OUTPUT,所以每個腳位下面都要加上等待0.5秒,讓腳位可以正確改變成上拉電阻模式。
建立變數[密碼],讓按鍵的值可以顯示出來。
[同時輸出:腳位4輸出1,腳位5輸出0,腳位6輸出1,腳位7輸出1],數位腳D4、D6、D7輸出高電位(1),數位腳D5出低電位(0),就是只有第3行的按鍵[369#]按下去會接地,可以讀取到低電位(0)。
[重複無限次],檢查按鍵按下了沒有。
如果按下某一個按鍵時,D8、D9、D10、D11只有一個會讀取到低電位(0),就顯示對應的符號。
程式下載:369#.sb2
(四)按鍵ABCD
先設定數位腳D8、D9、D10、D11為[INPUT_PULLUP]。
[等待0.5秒],因為內定數位腳位為OUTPUT,所以每個腳位下面都要加上等待0.5秒,讓腳位可以正確改變成上拉電阻模式。
建立變數[密碼],讓按鍵的值可以顯示出來。
[同時輸出:腳位4輸出0,腳位5輸出1,腳位6輸出1,腳位7輸出1],數位腳D5、D6、D7輸出高電位(1),數位腳D4出低電位(0),就是只有第3行的按鍵[ABCD]按下去會接地,可以讀取到低電位(0)。
[重複無限次],檢查按鍵按下了沒有。
如果按下某一個按鍵時,D8、D9、D10、D11只有一個會讀取到低電位(0),就顯示對應的符號。
程式下載:ABCD.sb2
三、讀取全部的按鍵
確定每一個按鍵的對應關係後,就可以寫一個程式來讀取按鍵結果。
先設定數位腳D8、D9、D10、D11為[INPUT_PULLUP]。
[等待0.5秒],因為內定數位腳位為OUTPUT,所以每個腳位下面都要加上等待0.5秒,讓腳位可以正確改變成上拉電阻模式。
建立變數[密碼],讓按鍵的值可以顯示出來。
將上面測試的4個程式稍微修改,分別做成[函式積木],[掃描1]、[掃描2]、[掃描3]、[掃描4],分別代表掃描的按鍵行列。
[按鍵程式]:重複無限次的檢查按鍵按下了沒有。
一開始先設定密碼為[Z],然後檢查按鍵時去比對密碼是否有改變,如果按下了按鍵,密碼會換成按鍵符號,然後廣播[按鍵1],說出按下的按鍵符號,然後停止程式。
程式下載:全部.sb2
四、連續輸入
上一個程式按下按鍵後,程式就會停止。需要重新再按一次綠旗重新執行程式。
請將程式修改成可以連續按鍵輸入。
修改上一個程式,將按鍵後[停止全部程式]改成[停止腳色的其他程式],然後繼續執行[按鍵程式],讓程式變成可以連續輸出。
程式下載:連續輸入.sb2
五、紀錄輸入
上一個程式按鍵輸入,顯示結果後,就不見了。
請修改程式,將每一次按鍵的結果記錄下來。
主程式同上。
建立一個[輸入清單]儲存按鍵輸入的結果。
程式下載:紀錄輸入.sb2
六、密碼開門(密碼鎖)
設計一個程式可以比對按鍵結果,如果按鍵輸入和密碼相同就開門。
除了主角小貓之外,再新增門1、門2,兩個腳色,當成門,當密碼符合後,就打開門。
小貓腳色:
主程式同上。
再建立一個[密碼清單],儲存預設密碼。範例是3個密碼。
一開始先將[密碼清單]隱藏,不要讓人看到。
然後跟前面程式一樣,輪流輸入密碼,當輸入完3個密碼以後,[廣播訊息(比對)],比對按鍵輸入結果和預設密碼是否相符。
[當收到訊息(比對)],輪流比對3個密碼,如果全對,就[廣播訊息(開門)],否則就請重新按鍵輸入。
[當收到訊息(開門)],將[密碼清單]顯示,並顯示及說出[新年快樂]。
門1腳色:
一開始先顯示,定位到擋住螢幕左邊。
[當收到訊息(開門)],慢慢往左移動,有開門的感覺,門打開後就隱藏。
門2腳色:
一開始先顯示,定位到擋住螢幕右邊。
[當收到訊息(開門)],慢慢往右移動,有開門的感覺,門打開後就隱藏。
程式下載:密碼開門.sb2
延伸:
1.可以增加[當收到訊息(開門)],就輸出一個訊號給電鎖開關,就變成真正的電子密碼門鎖了。
2.可以增加[當收到訊息(開門)],就輸出一個訊號給 [繼電器] (第13課),就變成電子密碼開關了,可以控制家電用品。
3.可以使用 [ 伺服馬達為腳位(…)轉動角度為(…)度] 的指令積木,用來控制伺服馬達的轉動角度。當輸入不同的密碼,可以轉動不同的角度,可以觸動不同的開關,做出不同的動作。(第11課)
4.小朋友想想看,按鍵開關還有什麼用途?
——————
註1:參考資料:https://swf.com.tw/?p=917
註2:
資料來源:http://yehnan.blogspot.tw/2013/09/arduinotilt-ball-switch.html
註3:
讀取資料時,常常因為受到環境雜訊的影響,會發生讀取訊號不穩定的現象(有時讀取到 HIGH 有時卻讀取到 LOW),造成讀取判斷錯誤。為了確保它在穩定的狀態,,必須接個上拉電阻或下拉電阻。
詳細說明請參考:http://blog.ilc.edu.tw/blog/blog/868/post/97509/656348
———————————————
相關連結:
新DiFi課程目錄
http://blog.ilc.edu.tw/blog/blog/868/post/104089/678192
WFduino(Arduino)課程目錄
http://blog.ilc.edu.tw/blog/blog/868/post/97509/641433
————————
為什麼要推Arduino初級班課程為正式課程?
A:
1.程式寫作如果結合外部感應器,可以達成簡單的自動控制功能,進一步讓學生創作一些作品改善生活或是增加樂趣。課程內容適合小孩或初學者,完成初級班課程後,發揮創意再加上市面上的各種感應器,就可以創造各種有用、有趣的作品,讓資訊課不再只是[電腦課]。
2.教育機會均等:適合國小五、六年級以上學生,全年級都上一個學期課的型態,讓全校學生都能接受基礎的Maker資訊課,讓家裡沒有電腦、沒錢上社團、科學班的學生享有平等的受教權。
3.本系列課程,材料便宜(初級班基本材料費每校只要幾千元),程式安裝簡便,學生學習容易(簡單的電子零件,搭配積木式拖拉來完成程式寫作),有完整的教材教案提供老師教學(老師只要依照課程示範,學生創意無限)。