About虛擬&實際

@分享虛擬與實際的世界中所遊玩的心得紀錄,從物理化學到生命科學、從人文藝術到現代科技、從虛擬介面到實際生命體。享受的只是一種學習與體驗。若文章內容有誤,歡迎提出以供修改,對文章的回饋,歡迎寄信給我!一起分享,互相學習成長的環境。
@個人簡介在『關於韃靼』
@我是韃靼~我的信箱:chenyuquan at gmail dot com

2013年3月17日 星期日

Arduino_Project12_Knock Lock

前言:
這次的專題計劃是設計可以上鎖的箱子(同樣地,也是先順利完成專題為主)。利用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;
  }

沒有留言:

張貼留言