前幾年做這題目時,當時網路上所有能找到的小綠人動作分解圖都是18個分解動作,且頭不會動的版本

目前網路上已可找到7個分解動作,頭會動版本的資料,所以重做7個分解動作的簡單小綠人程式


找到的分解動作資料:

動作1

20151011-01.jpg 

動作2

20151011-02.jpg 

動作3

20151011-03.jpg 

動作4

20151011-04.jpg 

動作5

20151011-05.jpg 

動作6

20151011-06.jpg 

動作7

20151011-07.jpg 

停止時畫面

20151011-08.jpg 


程式面板:號誌燈的圖形,小綠人是由16×16的LED陣列構成。加上倒數秒數的顯示元件

20151011-09.jpg 


完成的全部程式如下圖:

20151011-10.jpg 

程式的主要基本原理還是使用查表法,將分解動作圖做成資料陣列,再由程式去一一取出資料顯示到面板上

本程式用的方法:先將每一個分解動作圖拆成多個橫列,以小綠人為例每個分解動作圖都拆成16個橫列。再來是將橫列圖形上亮的點當作1,不亮的點當作0,轉成0和1組成的二進制數值,接著再將這二進制數值轉成十進制數字。於是每一橫列可只用1個數值表示,而一張分解動作圖只需用1D數值陣列即可完成,以此方法完成的整個陣列資料是2D陣列


完成的小綠人陣列資料如下圖:

20151011-11.jpg 



小綠人的程式部份:

20151011-12.jpg 

陣列資料的編排是由每個分解動作圖加上停止時畫面所轉成的數字陣列。所以是16×8的2D陣列,共有8列資料
程式使用While Loop控制,裡面的時間控制元件(Wait Until Next ms Multiple)設定為1,也可以用其他方式來計時,重點是計時的間隔要小。因為小綠人的動作有速度變化,計時間隔小才能做出明顯的速度變化


程式預設倒數15秒,一開始是慢速,剩10秒時中速,剩3秒時快速。因此使用Greater Or Equal?和Select元件作比較,設定時間到達時切換一次顯示速度。最後在倒數為0時要將小綠人換成停止時畫面,所以同樣再用Select元件切換動作。小綠人的顯示動作使用For Loop迴圈來完成,在For Loop使用移位暫存器,移位暫存器的初始值是16×16的陣列。For Loop內則用Number To Boolean Array元件把資料陣列來源的每個數值還原成Boolean陣列,在使用Replace Array Subset元件把原成的Boolean陣列重組成動作圖形輸出
文章標籤
創作者介紹

LabVIEW & PLC還未出師的小工程師部落格

未出師的小工程師 發表在 痞客邦 PIXNET 留言(0) 人氣()