专注电子技术学习与研究
当前位置:单片机教程网 >> Arduino >> 浏览文章

基于Arduino和Flash的DisLab课件制作教程—2

作者:未知   来源:不详   点击数:  更新时间:2014年07月31日   【字体:

                   第二节  Arduino和Flash的连接——Flash接受来自Arduino的数据

    上那一节讲到了Arduino和Flash连接的基本设置,这节就来做个实验,让FLash接收来自Arduino的数据。整个实验分为两部分,Arduino端的编程和Flash端的编程。没有任何的硬件电路,只是做一个数据传输的测试。
    首先对Arduino进行编程,目的是让Arduino每隔一定的时间由串口发送一个数据,这里每个1秒发送一个Arduino的计时数据。
*************************以下为Arduino端的程序*******************************
unsigned long ntime;    //定义一个长整形数ntime
void setup()
{
  Serial.begin(9600);    //开始一个串口通信,波特率9600
}
void loop()
{
    ntime=millis();         //让ntime等于此刻Arduino的时间
   Serial.print(ntime);    //串口发送ntime
   Serial.println("$");    //发送一个结束字符“$”;  
delay(1000);             //等待1秒
}
**************************************************************************
下面编写Flash端的程序,我用的是Flash professional cs5.5软件
先新建一个Actionscript3.0类文件,类名称就取为gettime,写入以下程序
***************************以下actionscript3.0类文件(gettime)程序********
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 gettime extends Sprite
private static const dataend:String = "$";//定义一个结束字符,注意与arduino上一样
private var _socket:Socket;
private var _proxyAddress:String = "127.0.0.1";
private var _proxyPort:uint = 5333;
 
var xsarduinotime:TextField = new TextField();//新建一个名为xsarduinotime的文本框 
 
 
//gettime主程序
public function gettime()
{
addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);    //侦听类是否被添加到舞台,每次添加时运行onAddedToStage
}
            
private function onAddedToStage(event:Event):void
{
removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);    //移除侦听
 
 //下面的程序是与arduino建立连接,如果连接上了怎么样,如果断了怎么样等等
_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 = "";//定义一个字符串缓存字符
 //下面程序接受来自arduino的数据,一个字母一个字母接收的
private function onSocketData(event:ProgressEvent):void
{
var data:String = _socket.readUTFBytes( _socket.bytesAvailable );
buffer += data;       //把来自串口缓存的一个个字符拼接起来
var msg:String;       //再定义一个字符串变量来msg
var index:int;        //一个整形变量index来读取结束字符在buffer字符串中的位置
while((index = buffer.indexOf(dataend)) > -1)  //如果读到了结束字符,也就是"$"
{
msg = buffer.substring(0, index);         //msg就等于去掉了“$”后的字符串
buffer = buffer.substring(index + 1);     //另buffer等于结束字符串的后一位,以便下一个字符串的接受
trace("Message Received from Arduino : " + msg);  //测试时候用,输出以下msg的值
//下面我们让它显示在文本框中  
xsarduinotime.width=200;   //文本框的宽度200
  xsarduinotime.x=100;       //文本框的位置
  xsarduinotime.y=100;
  xsarduinotime.text=msg;     //显示time from arduino
  var format:TextFormat = new TextFormat();    //新建文字格式format
        format.size=24;                        //文字大小24
    xsarduinotime.setTextFormat(format);       //将文字格式赋予xsarduinotime文本框    
addChild(xsarduinotime);
}
}
//下面定义关掉arduino时,显示Socket Closed
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);
}
}
}
******************************************************************************
好了,下面在用Flash cs新建一个actionscript3.0文件,然后保存在和上面的gettime类文件gettime.as同一个文件夹内,在属性——类中填入gettime。这样就大功告成了。下面来试一下具体的使用。
首先连接Arduino和电脑,然后双击serproxy.exe文件,然后再flash cs软件中按Ctrl+Enter,怎么样,受到来自Arduino的数据了吧。那么如果不在Flash CS软件下怎么运行呢。
  差不多,先双击serproxy.exe文件,然后用Flash Player打开你刚生成的SWF文件......居然打不开?不要急,如果直接用Flash Player来打开的话,需要一些简单的设置,因为Flash Player默认是不允许读取数据的。
在Flash Player窗口中右键——高级——受信任位置设置,把你的SWF所在的位置加进去。这样就成了。
 
关闭窗口

相关文章