SPIKE 樂高機器人

我的網頁

2011-02-24

使用自製陣列的Touch NXT樂透機(已更新影片文章)

探奇曾經在兩年前發表樂高 NXT 樂透機,可惜程式已經隨著舊電腦消失,雖然可以看著程式圖片重建,不過探奇有另外的想法。

樂透機程式的基本想法只有一句話:從1到49當中選出六個不重複的號碼。




轉換成NXT程式就需要動腦想一想。

因為需要比對數字是否重複,所以我們需要讓NXT記住已經產生的數字。

問題來了,如何讓NXT記住數字呢?有經驗的讀者一定會回答:『變數』。

是的,的確可以使用變數儲存,不過我們需要六個數字,也就是六個變數。

樂高 NXT 樂透機中,探奇使用Array Block,一維陣列很容易儲存,也很容易讀取。

除了陣列,我們也可以使用File Access Block,將數字記錄在檔案中。

不過探奇決定自己寫個假陣列,模擬一維陣列的讀取方式。

下圖就是寫入假陣列的自製命令方塊:根據Index的數目,決定儲存的變數。

我設定Lucky1.........Lucky6等六個變數,以Index輸入的數目作判斷,由Switch Block將Value寫入相對應的變數中。

比較直覺及保險的作法是先將Value寫入一個變數Write_lucky,在Switch的每個Tag中將之寫入對應變數。



如果你充分瞭解資料線,那麼也可以如下圖,直接從Value拉入Switch block,省略一個變數,這個My block程式大小可以從600多KB降到313KB。



有了這種假陣列還可以當作其他用途喔!

相較於其他程式語言,NXT-G限制頗多(因為它本來就是設計為基礎學習使用),例如缺乏陣列等好用方便的元素。不過我們還是可以利用一些技巧『製作』出符合需求的功能。同時也讓我們可以學習到更多解決問題的辦法。

這不正是機器人教育所強調的『發現問題、解決問題』能力的訓練嗎?

如果還有其他更好的方法,也歡迎大家提出討論。

測試結果的影片如下:(沒有用腳架,有點模糊)




3 則留言:

  1. 剛好最近也用NXTG寫樂透539的程式,我加的功能是樂透號碼產生後不能與上一期的五個號碼重複。
    寫法跟你們的不同,寄到這個信箱touch_classroom@yahoo.com.tw分享給大家^^
    [版主回覆02/27/2011 21:56:09]你好:

    哇!你一定是LabVIEW的高手,資料線可以拉得這麼順手。

    其實探奇也有這種苦力型的作法,不過因為害怕在NXT-G中,資料線很容易亂掉,只好用邏輯值來處理。

    等一下也寄給你參考。

    我可以將你的程式上傳提供給大家參考嗎?

    謝謝你的分享。讓我獲益良多。

    回覆刪除
  2. 老師你好,我...不是什麼labview的高手,摸LAB 8.2摸3個月還是不懂,這學期正要修這門課而已0.0"
    希望修完之後可以自己做NXTG方塊^^
    看完你們的程式,原來我們switch的用法是一樣的,之前為了打發時間寫一個猜四個數字的遊戲,結果在數字比較的時候也是用邏輯值的方法,寫到我的P4老電腦頻頻當機= ="
    所以後來才思考用迴圈條件來作為數字比較的方法,不過...也是寫到我的P4老電腦頻頻當機= ="
    跟矩陣運算比起來,我們這種方法真的都是苦力型的,我要好好去研究那個一維矩陣的方塊了。
    當然可以將我的程式上傳提供給大家參考,大家互相討論而不是互相找缺點批評,這樣很好呀^^
    也謝謝老師的分享。

    [版主回覆02/28/2011 20:50:08]你好:

    要做NXT-G命令方塊,應該需要LabVIEW 7.1版。到時候還希望借重你的長才,跟大家分享你的作品。

    寄給你的程式中,Switch是模擬你的作法,原本的苦力程式沒有Switch,就是將六個Switch Tag的程式『串連』。整個程式更大更長,也很容易拖垮NXT-G。

    試著多使用My Blocks,比較不容易當機喔!

    程式本來就有很多種寫法,重點是達成任務目的。

    至於程式效率的提升,可以透過大家多多討論,激盪出更多的好方法。

    歡迎討論!謝謝!


    回覆刪除
  3. 呵呵~ 我們系上習慣把labview簡單說成lab,造成誤會,我電腦灌的是labview8.2唷^^
    lab每年改版更新後,程式都不能相容,超麻煩的!
    謝謝老師的多次讚許,讀友互相求進步^^

    [版主回覆03/01/2011 21:41:29]你好:

    我應該沒有誤解你所謂的lab 8.2,也知道應該就是指LabVIEW 8.2 。

    我記得8.2或8.5應該都不能製造新的NXT-G Block,因為NXT-G是用7.1寫的,也因為LabVIEW改版後不相容,所以造成一些困擾。

    無論如何,祝你上課順利!歡迎繼續討論。

    回覆刪除

探奇歡迎大家留言討論!謝謝分享你的意見。