2010年1月25日 星期一

Light control 補充說明

http://4rdp.blogspot.com/2010/01/light-control.html


自從貼出「自動感應燈」一文後,謝謝許多 NXT 玩家前來關心,尤其感謝探奇教室的邱老師熱心推薦,瀏覽量瞬時暴升。

為避免一些 NXT 玩家錯覺,以為程式只要寫出上圖 NXT-G 就可以達成,因此補充說明這個自動感應燈的運作方式。

首先看上圖程式,最外圍設了一無窮迴圈,裡面第一個步驟關掉燈,第二個等待人員或物品靠近三十公分以內,打開感應燈,再等待人員或物品離開,延遲十秒鐘去關閉感應燈。如果你的程式是如此設計,對不起,我只能給您六十分!

問題出在十秒鐘延遲,如果這十秒鐘,有人再靠近,感應燈應該繼續亮著,直到人員或物品離開才重新計時。不過你會發現這個程式,人員離開後開始計時,中途人員靠近沒有用,十秒鐘時間到,感應燈會被先關掉再重新打開。

也許有聰明的玩家會修改上例第一步驟加上判斷,如果仍有人員靠近,不關閉感應燈,即使這樣也只能給您七十分,因為計時不準確。如果人員在第五秒出現第八秒又離開,兩秒後感應燈會被關閉,而不是十秒後關閉。

要解決這項精準流程控制,必須加入變數處理,先前參考邱老師的範例,提到不用變數,其實是錯誤的,主要原因在 NXT-G 不提供類似 GOTO 跳躍指令,程式只能循序執行,NXT-G 不是我常用的工具因而誤判,如果真有厲害的高手,NXT-G 不用變數並能精準控制自動感應燈,第一位達成者,我就請客吃一頓王品牛排大餐。

這雖然是一個功能簡單的程式,但是也是要留意這些細節,何況商用或工業產品。

16 則留言:

  1. 我來領王品牛排囉,
    解答如下
    http://tw.myblog.yahoo.com/dear-kuo/article?mid=378
    這個 NXT-G程式會偵測
    1.若有人接近30cm內,就會點亮燈,
    1.若始終有人未離開則燈會一直亮著,
    2.若最後一個人離開後,燈亮5秒鐘後自動熄滅
    3.沒有使用任何變數
    我的口水都快流出來囉,哈哈。

    回覆刪除
  2. http://www.badongo.com/file/20000846
    不知道如何貼圖只好上傳讓大家下載
    功能就如題目所說,我也沒用變數
    不知道有沒有王品可吃,呵呵

    回覆刪除
  3. 郭子的答案是正確的,之前沒注意到 Timer 的使用,如果換成倒數計時會無解。

    因此王品牛排歸您的,二月找一天一起用餐吧。

    至於雲林的朋友,很抱歉,第一名永遠只有一位,下次請早,謝謝。

    回覆刪除
  4. 想展示您的 NXT-G 的朋友,歡迎上載檔案到研發養成所的線上論壇,http://groups.google.com.tw/group/4rdp?hl=zh-TW

    麻煩郭子與雲林的高手上載程式,因為您的程式超難下載,謝謝。

    回覆刪除
  5. Bridan大大,我已經上傳程式u07.rbt到網站了,歡迎大家一起討論指教。

    啊...好好吃的王品牛排,晚上想到都會笑,(流口水中)

    回覆刪除
  6. 已經上載摟.

    這次飲恨真是可惜,不過從雲林上去台北吃王品好像也有點浪費@@,車前太貴了,恭喜郭子大大啦.

    回覆刪除
  7. 感謝各位的參與,日後會考量遠地朋友的情形,如果能夠聚餐是最好,因為面對面談天是最好的交誼方式。

    謝謝

    回覆刪除
  8. 天下父母心,為了小朋友學習NXT,最近努力研習NXT-G程式,前二天看到此題目,今日想參與發表自己寫程式內容,敬請參閱指教,謝謝!(程式已上傳)

    回覆刪除
  9. 飛狼您好,

    您的程式流程 OK 沒問題,寫程式是沒有標準答案,只要運作正確即可,就像是寫作文一樣,所以可能有上百種寫法,好的程式設計師還要注意程式大小與執行效能。

    真是辛苦的把拔,如果以前您未曾寫過程式,那麼您可以寫出來是很厲害的。我還沒教我的小朋友寫程式,因為他還缺乏很多基礎知識,我覺得一般到高中之後,學習可能比較好,現階段盡量讓他對實體世界多體驗,日後對虛擬事物自然能思考。如果小朋友有濃厚興趣那就另當別論。

    歡迎您的參與。

    回覆刪除
  10. 謝謝您的回覆,小朋友現在是國小五年級,學NXT一年左右,總覺得他寫的 NXT 程式應再加強,因本身也是從事軟體開發工作的,所以學NXT-G倒是不難,只是NXT-G為了要易於使用,所以限制較多不太習慣。

    因為是寒假,所以小朋友的時間較多,想找一些題目讓他練習,才找到您的Blog,不知是否還有什麼題目可以練習的,不需要王品台塑牛排的 <*_*>

    謝謝

    回覆刪除
  11. 飛狼大大跟我一樣啊,都是為了小朋友才買的,不過買了三個多禮拜幾乎都是我在玩@.@
    目前在挑戰用Light sensor(因為沒gyro sensor)完成兩輪平衡車,也強迫自己只用NXT-G來完成,因為以後還要教小孩,才二年級而已學C語言還太早,想等他六年級才開始讓他學C.

    回覆刪除
  12. 雲林大大,想不到您的小朋友二年級就開始玩 NXT了,太厲害了吧!!目前使用NXT-G 覺得綁手綁腳的,想要試試看用C的,但不知哪一種較好用,看過網站上的比較(http://www.teamhassenplug.org/NXT/NXTSoftware.html),似乎 RobotC是個不錯的選擇??
    另外兩輪平衡車用Ultra sonic 會不會比用 Light Sensor 更好??我也有點想試試看!!只是時間上較不易調配!!

    回覆刪除
  13. Ultra sonic感覺上很糟糕,常出現誤判數值,雖然可以把太誇張的數值濾掉,可是怕成是效率會變不好.
    看到網路上有人用不斷前後擺動來達到平衡,可是用NXT-G寫起來擺動的速度就是不過快,也有可能是我對NXT-G的了解還不夠,再努力個一陣子,在不行的話只好試試RobotC了,不過30天後就得上網刷卡才能再用@.@

    回覆刪除
  14. 昨天週五工作較忙沒上線,沒想到大家就留言談天,讓各地的朋友相聚,不分地域與時間,感覺不錯。

    NXT 價格高昂,相當於一台電腦,小朋友沒錢也不懂,不會花錢買,青少年有錢先買手機再說,剛出社會的新鮮人,交朋友、準備結婚買房子,想賺錢的先投資買股票、基金,只有經濟基礎良好,有理工背景的把拔,為培養下一代競爭力,另外自己也想玩,才會出錢買這個超級玩具。不然就是學校學術研究以及在學校接觸過的學生,這是我觀察很久的主要客源。

    確實 NXT-G 限制很多,若要特殊功能,需要使用其它程式工具才能達成,我是比較推薦用 NXC,因為它免費並且限制少,語法與 C 相通,未來出社會程式設計工作比較好找,尤其嵌入式系統最缺人,不過要有電子或電機背景。以後有機會再補充幾篇感測器專文分享。

    最後應飛狼大大需求,下篇文章再出一題給大家玩玩。

    回覆刪除
  15. 經由邱老師的連結,很高興可以到研發養成所
    看到大家都是程式中的高手
    希望可以跟大家好好學習程式語言的用法

    回覆刪除
  16. Addlw 您好

    稱為程式高手不敢當,只是比別人多了許多經驗而已,歡迎瀏覽研發養成所,希望這裏每一篇文章能夠有益於各位,假以時日您也可以成為某個領域的專家。

    回覆刪除