前言:
時間沙漏(!?),可以計時的數位沙漏,設定好每個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
沒有留言:
張貼留言