學習目標 : 認識fayaBCD開關模組的功能及使用方式
學習時間 : 40min
示範模組 : (1) fayaduino UNO
(2) faya 電源底板
(3) fayaBCD開關模組
工具 : (1) 樂高積木底板 (相容)
====================功能介紹====================
faya BCD開關模組擁有4個數位輸出埠,輸出的狀態隨著輸入的旋鈕(0~9)改變,它的好處是用4個腳位就能顯示10種變化 (2^4=16 > 10),輸入與輸出的關係如下所示 (H = Logic High, L = Logic Low):
- 當轉到0時,埠1 2 4 8 的數位輸出分別為 L L L L
- 當轉到1時,埠1 2 4 8 的數位輸出分別為 H L L L
- 當轉到2時,埠1 2 4 8 的數位輸出分別為 L H L L
- 當轉到3時,埠1 2 4 8 的數位輸出分別為 H H L L
- 當轉到4時,埠1 2 4 8 的數位輸出分別為 L L H L
- 當轉到5時,埠1 2 4 8 的數位輸出分別為 H L H L
- 當轉到6時,埠1 2 4 8 的數位輸出分別為 L H H L
- 當轉到7時,埠1 2 4 8 的數位輸出分別為 H H H L
- 當轉到8時,埠1 2 4 8 的數位輸出分別為 L L L H
- 當轉到9時,埠1 2 4 8 的數位輸出分別為 H L L H
====================原理知識====================
以下解釋提供給有需要知道背後原理的人:
BCD (Binary-Coded-Decimal),二進碼十進制,利用了4個位元來儲存一個十進位的數字,最常用的BCD編碼,就是0到9這十個數值用二進碼(1,2,4,8)來表示,關係如下:
用例子解釋,要顯示數字7時,7 = 1x1+2x1+4x1+8x0,因此BCD(1248)碼 = 1110。1代表導通的意思,BCD開關透過內部PCB,當轉到某數字時,相關的輸出點(1,2,4,8)和COM點會導通,我們透過分壓定理,把COM點串1K電阻到VCC,輸出10K電阻對地,讓導通的輸出拉到High。因此當我們轉到數字7時,輸出在埠(1, 2, 4, 8)得到 (High, High, High ,Low)的結果。
BCD的內部結構類似這樣:
了解模組功能(原理)後,我們用以下範例來展示模組的功能:
目標:
(1) 將BCD開關選定的數字顯示在Arduino Serial Monitor
接線:
(1) 電源線連接
如下圖所示,連接的說明請看這篇文章 或簡易版
(2) 訊號線連接
Arduino_8 ===> BCD開關_1
Arduino_9 ===> BCD開關_2
Arduino_10 ===> BCD開關_4
Arduino_11 ===> BCD開關_8
範例程式:
備註:
- 我們利用4個變數n1, n2, n4, n8分別記錄輸出埠1,2,4,8的狀態,然後把結果加總,就會和目前BCD開關所轉到的數字相同
範例結果:
討論:
執行的時候,筆者發現有時候從某個數字轉到下一個數字時,過程中會出現 number = 1, 或 number = 2等等怪怪數字,這是因為當我們轉旋鈕轉到一半的時候,Arduino剛好到偵測當時的狀態,就直接把轉到一半狀態的結果顯示在Serial Monitor上,大家可以把最後一行的時間延長一些,解決此問題。
另外我們的程式讓Arduino判斷當指撥數字改變時才顯示數值,如果一開始指撥數字停在0的地方 (0 = 0),因此Serial Monitor開啟後不會顯示出任何資訊,但如果一開始指撥數字停在3的地方 (3 != 0),Serial Monitor開啟後就會馬上顯示出來 number=3 (因為3不等於0),這樣顯示結果不一致,大家可以動動腦,看看怎麼靠程式修正這個問題!
也歡迎大家在底下留言或到我們的粉絲團留言喔!
====================================
fayalab 粉絲團
FB本篇留言版
沒有留言:
張貼留言