欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

專(zhuān)注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> Arduino >> 瀏覽文章

基于Arduino和Flash的DisLab課件制作教程—5

作者:未知   來(lái)源:不詳   點(diǎn)擊數(shù):  更新時(shí)間:2014年07月31日   【字體:

                  第5節(jié)  測(cè)量量—時(shí)間圖像繪制

    在利用傳感器做實(shí)驗(yàn)時(shí),將測(cè)量量隨時(shí)間變化的情況用圖像的方式記錄下來(lái)是很重要的一種方式。這一節(jié)我們就來(lái)將如何用Flash來(lái)繪制測(cè)量量-時(shí)間圖像。
    我們?nèi)耘f選擇上一節(jié)中的紅外測(cè)距傳感器,來(lái)繪制所測(cè)得的距離-時(shí)間圖像。所以Arduino端的程序與連接都與上節(jié)一樣,這里不再描述。下面主要介紹Flash端的類(lèi)編寫(xiě)和Flash動(dòng)畫(huà)代碼。其實(shí)將全部代碼寫(xiě)在類(lèi)里面也可以實(shí)現(xiàn),但是個(gè)人覺(jué)得不是很靈活,畢竟有時(shí)候我們需要將圖像挪個(gè)位置之類(lèi)的還是直接可視化操作比較簡(jiǎn)單。
    首先我們先來(lái)改寫(xiě)一下上節(jié)中的hongwaiceju.as類(lèi)文件下面就是要添加的語(yǔ)句:
  先是三個(gè)定義語(yǔ)句:
************************************************************************
public static var msgarray:Array = new Array();   //新建一個(gè)名為msgarray的全局?jǐn)?shù)組
public static var ari:Number=0;    //新建一個(gè)全局變量,用來(lái)傳遞數(shù)組指針
var ri:Number=0;                      //新建一個(gè)變量,用來(lái)記錄數(shù)組指針
************************************************************************
就添加在原來(lái)的
public static var  msg:String;
這句后面。
然后在
***************************************************
while((index = buffer.indexOf(EOL_DELIMITER)) > -1)
msg = buffer.substring(0, index);
buffer = buffer.substring(index + 1);
*****************************************************
后面添加:
***********************************************
msgarray[ri]=Number(msg);    //將msg變量賦值到msgarray數(shù)組
ari=ri;   //全局變量指針等于數(shù)組指針
ri++;  //數(shù)組指針加一
**************************************************
上面添加的語(yǔ)句主要實(shí)現(xiàn)了將讀取到的測(cè)量值記錄在數(shù)組中,之所以這樣做是因?yàn)榇龝?huì)在動(dòng)畫(huà)界面讀取數(shù)據(jù)時(shí),由于幀數(shù)的關(guān)系,并不是每個(gè)測(cè)量值都會(huì)在每一幀運(yùn)行時(shí)被讀到,所以有可能會(huì)出現(xiàn)數(shù)據(jù)遺漏,當(dāng)然如果動(dòng)畫(huà)幀數(shù)比傳感器采集數(shù)據(jù)要快可能不會(huì)有這個(gè)問(wèn)題,但如果動(dòng)畫(huà)幀數(shù)比較低時(shí),這個(gè)問(wèn)題就比較嚴(yán)重了。所以這里用一個(gè)數(shù)組來(lái)記錄所測(cè)量到的數(shù)據(jù),在每一幀讀取時(shí)就不會(huì)出現(xiàn)漏數(shù)據(jù)的情況了。
  下面開(kāi)始制作動(dòng)畫(huà)部分,同樣新建一個(gè)actionscript3.0文件,然后類(lèi)里面填寫(xiě)hongwaiceju。接下去在新建一個(gè)影片剪輯,取名為huitu。然后再huitu影片剪輯的動(dòng)作代碼內(nèi)添加如下語(yǔ)句:
************************************************************************************
import flash.display.Shape; 
var ai:Number=0;
var ii:Number=0;
var msgnum:Number=0;
addEventListener(Event.ENTER_FRAME,onEnterFrame);
 var fttuxiang:Shape = new Shape();  //畫(huà)圖線(xiàn)fttuxiang
 fttuxiang.graphics.lineStyle(2, 0x990000, .75);
 fttuxiang.graphics.moveTo(100, 450);
 addChild(fttuxiang);
 var ftmask:Shape = new Shape();    //fttuxiang的遮罩層
ftmask.graphics.lineStyle(1, 0x000000); 
ftmask.graphics.beginFill(0xff0000); 
ftmask.graphics.drawRect(100, 100, 600, 450); 
ftmask.graphics.endFill(); 
this.addChild(ftmask);
fttuxiang.mask=ftmask;
 function onEnterFrame(event:Event):void{        //每次運(yùn)行幀時(shí)運(yùn)行下列語(yǔ)句
 while (ai<=hongwaiceju.ari)//如果ai值小于hongwaiceju中的ari,一直執(zhí)行下列語(yǔ)句
                                     //這樣可以讀取每?jī)蓭g的所有數(shù)據(jù)。
  {     msgnum=Number(hongwaiceju.msgarray[ai]);
     fttuxiang.graphics.lineTo(100+ai*5, 550-msgnum*0.5);//圖線(xiàn)繪制
           ai++;
if(ai>80)//如果圖線(xiàn)超過(guò)了右邊界,則開(kāi)始向左平移圖像
fttuxiang.x=(80-ai)*5;    
  }
  }
*******************************************************
然后再界面上畫(huà)兩條線(xiàn)表示橫縱坐標(biāo)軸,具體位置:x:100     y:100    寬:500  高:450
然后回到主場(chǎng)景,打開(kāi)庫(kù),將庫(kù)中的huitu拖入主場(chǎng)景,制作完畢,運(yùn)行后界面如圖:

僅僅一個(gè)簡(jiǎn)單的功能演示,你自己可以在坐標(biāo)軸上加入坐標(biāo),或者設(shè)定一些按鈕來(lái)控制圖像的大小等等,發(fā)揮自己的想象力吧。
關(guān)閉窗口

相關(guān)文章