About虛擬&實際

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

2013年1月27日 星期日

Arduino_Project08_Digital Hourglass

前言:
時間沙漏(!?),可以計時的數位沙漏,設定好每個LED的間隔時間後,會持續的亮燈。可以搖晃Tilt switch重新計時。

硬體:

六個LED,六個220 Ohm resistor,tilt switch。

程式:

一開始設定初始時間,然後利用millis()的計時功能與設定的interval做判斷,若超過interval則開啟一顆LED且在LED的計數上自動加一以作為下次開啓的基準。另外是設定currentTime & previousTime,所以當超過interval的時候就將previousTime改變成currentTime,這樣再來的currentTime就繼續與新的previousTime作比較了。(應該就是累進計算比較的方式)。
    另外比較意外的小錯誤是我原本想將紅色LED作為時間的最後一個階段,但是卻順序顛倒,因為code的設計是從pin 2開始,所以修改了code中的順序,就改用了"x--"。

Code:
    long _32 bit number (include negative & positive number).
    unsigned long _ 32 bit number only include positive number.
    != _not equal to
    x++/++x _x增加1且傳回舊的x/x增加1且傳回新的x. 

圖片與影片:



後記:

比較有點混淆的command是++x/x++的傳回新與舊的數值,如果x++是傳回舊的數值,那第一次是(loop 1)x=2, x++ -> (loop 2) x=3, x++....(第二回圈傳回的是新的數值,也就是加過後的),不過網頁範例用的是如下:

x = 2;
y = ++x;      // x now contains 3, y contains 3
y = x--;      // x contains 2 again, y still contains 3

仔細思考後,在本project的code中,是如下:

if(switchState != prevSwitchState){
    for(int x = 2;x<8;x++){
        digitalWrite(x, LOW);
    }
    led = 2;
    previousTime = currentTime;
}

所以傳回舊的x是指新的switchState改變後又從2開始,而不是新的數值!?開始,而不是新的數值!?上面的command都是在if()一個新的判斷所加入的,都在粗體紅字的時候就執行完了,所以跟範例給的應該是不同意思。(範例中就直接在digitalWrite內執行了2~7的數值)還在思考這些小問題........

參考:
Tilt switch information 
Command

沒有留言:

張貼留言