本節書摘來自華章出版社《microduino實戰》一 書中的第3章,第3.5節,作者:姚琪 楊立斌,更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。
上一節重點介紹了microduino-core的i/o引腳的實體功能以及在程式中對應的函數操作。接下來趁熱打鐵,将剛學的知識用起來。這也是本書的一大宗旨:強調動手實踐,而非深入學習程式設計的文法或電子器件的原理,即在實踐中學習,在學習中實踐。
本節所用的示例是用i/o控制led的亮度,以進一步熟悉i/o的控制。
基本要求
用兩個按鍵調節led的亮度,一個按鍵增加亮度,另一個減少亮度。
基本原理
按鍵就隻有2種狀态,按下和斷開,如何将按鍵的兩種狀态轉化成控制闆能夠識别的高低電平信号呢?
如圖3-25所示,下降鍵采用内部的上拉,是以外部不需要添加電阻。當按下時,d5引腳直接連到gnd低電平;而斷開時,因為内部上拉的緣故,是以d5引腳接到了高電平。這就将按鍵的兩種狀态轉化成了高低電平的變化了。

上升鍵則采用了外部下拉,通過一個電阻将d2引腳直接引到了gnd上,是以斷開時,d2引腳為低電平,而當按下時,直接接到了5v高電平。據此得出了如表3-2所示的映射關系。
小知識 簡單介紹一下輕觸開關的4個引腳的關系。如圖3-25所示,1和2引腳是導通的,3和4引腳是導通的,如果按下,4個引腳導通。
明白了如何處理按鍵的狀态之後,再看看pwm是如何調節led的亮度的。
pwm全稱為脈沖寬度調制,如圖3-26所示。脈沖是指每個周期高電平的部分。所謂占空比就是方波的寬度占整個周期的百分比。比如占空比25%,就是說在一個周期内,有1/4的時間是高電平,而剩下的3/4是低電平。占空比0%就相當于輸出低電平,而占空比100%則相當于輸出高電平。
本例是d11口通過pwm直接驅動led,當輸出高電平時led點亮,輸出低電平時led熄滅。可以很直覺地想象,随着占空比的增加,高電平寬度越寬,led會越亮。這就是用pwm控制led的亮度的原理。
3.具體步驟
(1)搭建電路
根據上面提供的硬體清單和電路連接配接示意圖搭建電路,并用usb線與計算機連接配接起來。
(2)編寫并編譯程式
程式中采用的是上一節提到的analogwrite(pin, val)函數,即用pwm控制led的亮度,而用兩個按鍵控制占空比的增加或者減少。
(3)程式清單
用容易了解的變量名去映射端口的位址,這樣可以讓程式更加容易了解,不易出錯,而且也有利于軟體和硬體的調試。
打開ide輸入代碼并儲存,然後單擊下載下傳即可。
(4)檢視現象并調試
在ide工具欄中打開序列槽螢幕,在程式中序列槽波特率設定成了9600,是以在螢幕視窗選擇相應的速率。
試着按幾下上升鍵和下降鍵,檢視led的亮度是否有變化,再檢視序列槽列印出來的資訊,如圖3-27所示。
有興趣的讀者可以嘗試如下的操作,看看會出現什麼情況,再想想為什麼,這些問題對硬體的了解和引腳的使用都會有幫助。
1)如果d2和d5的管腳懸空,會出現什麼樣的狀況?
2)如果将pinmode (downkey,input_pullup)換成pinmode (downkey,input),又會出現什麼樣的情況?
3)在程式中,如果去掉delay (300)這樣的延遲語句,又會出現什麼樣的現象?