************************************以下為Arduino端程序*******************************
int sensorPin = A0;
int i = 0;
int juli;
void setup() {
}
void loop() {
}
**********************************************************
程序中的轉變的函數我是自己簡單測量的,用excel算出來的,可以看到線性度還是很好的,只是電壓值與距離是成反比的。
***************************以下為hongwaiceju.as類文件***************************8
package
{
import flash.events.Event;
import flash.display.Sprite;
import flash.display.MovieClip;;
import flash.net.Socket;
import flash.events.IOErrorEvent;
import flash.events.ProgressEvent;
import flash.events.SecurityErrorEvent;
import flash.utils.Endian;
import flash.events.MouseEvent;
import flash.text.*;
import flash.text.TextFieldAutoSize;
public class hongwaiceju extends MovieClip
{
private static const TOGGLE_LED_STATE:String = "t";//定義一個與arduino聯系字符
private static const EOL_DELIMITER:String = "$";//定義一個結束字符,注意與arduino上一樣
private var _socket:Socket;
private var _proxyAddress:String = "127.0.0.1";
private var _proxyPort:uint = 5333;
public static var msg:String; //新建一個全局字符串變量
var xsarduinotime:TextField = new TextField();//新建一個名為xsarduinotime的文本框
//gettime主程序
public function hongwaiceju()
{
addEventListener(Event.ADDED_TO_STAGE, onAddedToStage); //偵聽類是否被添加到舞臺,每次添加時運行onAddedToStage
}
private function onAddedToStage(event:Event):void
{
removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage); //移除偵聽
_socket = new Socket();
_socket.addEventListener( Event.CONNECT, onConnect );
_socket.addEventListener( Event.CLOSE, onClose );
_socket.addEventListener( ProgressEvent.SOCKET_DATA, onSocketData ); //偵聽有無來自端口的數據
_socket.addEventListener( IOErrorEvent.IO_ERROR, onIOError );
_socket.addEventListener( SecurityErrorEvent.SECURITY_ERROR, onSecurityError );
_socket.endian = Endian.LITTLE_ENDIAN;
_socket.connect(_proxyAddress, _proxyPort);
}
//連接上了執行
private function onConnect(event:Event):void
{
trace("Socket Connected");//連接上就發送一個消息
}
private var buffer:String = "";//定義一個字符串緩存字符
private function onSocketData(event:ProgressEvent):void
{
var data:String = _socket.readUTFBytes( _socket.bytesAvailable );
buffer += data;
var index:int;
while((index = buffer.indexOf(EOL_DELIMITER)) > -1)
{
msg = buffer.substring(0, index);
buffer = buffer.substring(index + 1);
trace("Message Received from Arduino : " + msg);
addChild(xsarduinotime);
}
}
private function onClick(event:MouseEvent):void
{
trace("onClick");
{
trace("You must be connected to send a command to the Arduino.");
return;
}
_socket.writeUTFBytes(TOGGLE_LED_STATE);//如果沒有不連接上,就發聯系字符給arduino
_socket.flush();//發送
}
private function onClose(event:Event):void
{
trace("Socket Closed");
}
private function onIOError(event:IOErrorEvent):void
{
trace("IOErrorEvent : " + event.text);
}
//下面也是出錯時的
private function onSecurityError(event:SecurityErrorEvent):void
{
trace("SecurityErrorEvent : " + event.text);
}
}
}
**************************************************************************
和第2節的類文件非常類似,只是改一下類文件名,還有就是將msg定義為了全局變量,以便待會可以引用。
接下去在和類文件同一個文件夾下創建一個actionscript3.0文件,先新建一個影片取名box(其實隨你取什么都行):
然后再隨便在你新建的影片剪輯里畫點什么,我這里畫了個方塊,然后再回到主場景,在庫里面將你剛建好的那個影片剪輯拖到主場景隨便什么位置,然后再在屬性里給其取名為box1。
然后點擊主場景,在動作里添加如下程序:
*********************************主場景動作程序******************
import flash.display.Shape;
addEventListener(Event.ENTER_FRAME,onEnterFrame);
box1.y=600-Number(hongwaiceju.msg); //box1,就是我們拖進去的那個影片剪輯的y坐標定義
***************************************
大功告成,現在先運行serproxy.exe,然后按下Ctrl+Enter,觀看一下最后的結果吧。把手放在紅外測距儀上方,上下移動,怎么樣,Flash動畫里的方塊也會跟著動起來吧!同理,你可以控制其他的動畫,或者Flash小游戲......