電氣動彈珠分流軌道micro:bit 編程
如未能下載建議使用firefox browser來開啟網頁
編程說明 :
由於micro:bit的LED display是以P9和P10運行,
如果不把LED disable , IO board會默認將P9和P10寫成1
(當插上馬達/燈到P9和P10時,即使沒有任何編程都會默認開啟)
而且對其他PIN位也會造成影響 , 例如 : 降低功效,增加反應時間等等...
P10 / P12 是電磁閥 , 所以不能讓它默認為開啟。
開始時先將電氣臂移至 Post1 (準備運作)
move arm to Pos1 的 Function 利用了 P1 (switch A) 來作地標 ,
當電動臂撞到 Switch A 時 , read pin P1 便會是 1 , 電動臂便會停下並到達 Pos1 ,
同時設下一個 iRunning 的 variable 。
當 P1 = 1 ( 電動臂在Pos 1 時 ) 並且 P4 = 0 (Pos 1 light sensor) 被彈珠遮掩沒光線時 , move arm 這個function 便會開啟。
P8 / P9 負責升起及降下電動臂 , P10/P12 負責吸起彈珠 。
然後利用 P13/P14 (motor) 來移動彈珠 ,
iRunning 代表現時移動距離的varibale , 而 iTarget 亦是目的地的距離。
P13 = 1 即時啟動 Motor , 讓電動臂移到目的地。
while iRunning < iTarget 的意思是當電動臂當未移到目的距離。
P6 是 Button B (齒輪轉動的按鈕) , 當齒輪轉動(電動臂移動時) 便會撞到它 即 P6 = 1 ,
而Button 放鬆後即是 P6 =/= 1 , 我們透過這2個條件來編寫1個if then else 及 while loop 從而計算 Button B 被按下的時數 , 每按下一次便把 iRunning + 1 , 從而計算距離。
當 iRunning = 19 ( > iTarget ) 時 便會離開while loop , 表示電動臂已到達目的地。
到達目的地後, 電動臂會停下來。 P10 / P12 = 0 , P13 = P14 = 0,
iRunning 及 iTarget 亦會重置為 0 。
當 P1 = 1 ( 電動臂在Pos 1 時 ) 並且 P0 = 0 (Pos 2 light sensor) 被彈珠遮掩沒光線時 , move arm to pos 2 function 會先開啟 , 然後再call move arm function
Pos2 的目的距離為 iTarget 11 , P13 先寫為 1 以移動電動臂 。
while iRunning < iTarget 的意思是當電動臂當未移到目的距離。
P6 是 Button B (齒輪轉動的按鈕) , 當齒輪轉動(電動臂移動時) 便會撞到它 即 P6 = 1 ,
而Button 放鬆後即是 P6 =/= 1 , 我們透過這2個條件來編寫1個if then else 及 while loop 從而計算 Button B 被按下的時數 , 每按下一次便把 iRunning + 1 , 從而計算距離。
當 iRunning = 11 ( > iTarget ) 時 便會離開while loop , 表示電動臂已到達目的地。
到達目的地後 P13 / P14 = 0 以將電動臂停下。
call move arm 以升起及降下電動臂並把彈珠吸起 , 然後準備運送彈珠到分流處。
分流處的距離為 iTarget = 3 , 設下後便再開啟motor移動電動臂 ; P13 = 1 。
跟過往的iTarget while loop 一樣 , 因此不再重覆說明。
到達 iTarget = 3 的分流處後 , 電動臂會停下來 , 因此P10 / P12 = 0 , P13/P14 = 0 。
iRunning , iTarget 亦會重置成 0 , 最後會重新移到Pos1 準備下一次的分流。