這次的專題計劃是設計可以上鎖的箱子(同樣地,也是先順利完成專題為主)。利用piezo可以反向的作為感測器(震動),敲打震動的次數來解開鎖定(servo motor)。
硬體:
servo motor, piezo, capacity, LED, resistor...etc
程式:
一開始也要先呼叫servo的函數庫(Servo.h),在sketch裡面設定敲打的次數(knock number),以及加入自定義函數來作初始的判斷,判斷piezo是否處在不正確的狀態(例如振動頻率過高或過低)。
Code:
boolean name = true (or false_ 定義"name"的布林參數。
圖片:
後記:
越到後面的專題,難度就越來越高,真是有很多有趣的挑戰性,不過code中的邏輯就更需要去思考為什麼這樣了。也瞭解與學到了如何自定義函數(記錄在後面的補充),雖然好像在之前也有看過的樣子!?~下個專題想必又是令人心動的學習過程。
參考:
Arduino reference
補充:(2013/3/17) 自定義函數(custom function),在這個專題裡面是先出現後,在完成void loop()後才進行“定義”,但是依然會運行在loop裡面!?(這裡還沒搞清楚)!
自定義函數可以有兩種結果:(1)不回傳數值(Value),則宣告此函數為void,類似loop()和setup()函數。(2)回傳數值(Value),則必須宣告數值的形態(int, long, float, etc.),但在這個case裡面是宣告成boolean type(布林形態)
boolean checkForKnock(int value){....:這個自定義函數中的value是輸入數值,在主要函數內則是以knockVal輸入此位置(但是knockVal其實就是等同於analogRead(piezo)所得到的數值)。
目前測試下,ㄧ開始按下按鈕後,會變成locked然後在serial monitor會一直出現還需要knock的次數,但是敲得很大力會亮黃燈,但是還需敲打次數依然會減少!?然後滿足敲打數(knock number)後會變成unlocked(開鎖),此時再次按下按鈕,會變成locked(亮紅燈)後馬上就再次變回unlocked(亮綠燈),再按幾次都是如此,是只能進行一次嗎??怪哉!
解決方案:(2013/3/18)
在比較瞭解程式的邏輯後,我發現原本的code本來就只能執行一次,因為在 "numberOfKnocks" 增加後就不會回到起始點(雖然在“setup”有初始化int numberOfKnocks = 0),所以必須在"loop"的結束後加上以下的code就可以重復的使用此程式囉。
Code:
if(numberOfKnocks >=3){
numberOfKnocks = 0;
}
沒有留言:
張貼留言