Arduino与Flash动画的互动
本帖最后由 宁静以致远 于 2014-4-28 20:02 编辑本人想通过Flash cs6做上位机程序,用来控制arduino的4个led,但是Flash中有发送数据,因为每点击4个按钮都有在串口通信的TX led灯会闪烁一下。大神看下神马问题
//////////////////////////////////////Flash段代码///////////////////////////////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 flashToLED extends Sprite
{
private static const lianxia:String = "aa";//定义一个与arduino联系字符
private static const lianxib:String = "bb";//定义一个与arduino联系字符
private static const lianxic:String = "cc";//定义一个与arduino联系字符
private static const lianxid:String = "dd";//定义一个与arduino联系字符
private static const dataover: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 flashToLED()
{
addEventListener(Event.ADDED_TO_STAGE, onAddedToStage); //侦听类是否被添加到舞台,每次添加时运行onAddedToStage
}
private function onAddedToStage(event:Event):void
{
removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage); //移除侦听
///////////////////////按钮绘制 /////////////////////////////////
var a:Sprite = new Sprite();
a.graphics.beginFill(0x00FF00);
a.graphics.drawRect(0,0, 50,10);
a.graphics.endFill();
addChild(a);
a.x = 200;
a.y = 200;
var b:Sprite = new Sprite();
b.graphics.beginFill(0x00FF00);
b.graphics.drawRect(0,0, 50,10);
b.graphics.endFill();
addChild(b);
b.x = 200;
b.y = 200+40;
var c:Sprite = new Sprite();
c.graphics.beginFill(0x00FF00);
c.graphics.drawRect(0,0, 50,10);
c.graphics.endFill();
addChild(c);
c.x = 200;
c.y = 200+80;
var d:Sprite = new Sprite();
d.graphics.beginFill(0x00FF00);
d.graphics.drawRect(0,0, 50,10);
d.graphics.endFill();
addChild(d);
d.x = 200;
d.y = 200+120;
//下面的程序是与arduino建立连接,如果连接上了怎么样,如果断了怎么样等等
a.addEventListener(MouseEvent.CLICK, onClickA);
b.addEventListener(MouseEvent.CLICK, onClickB);
c.addEventListener(MouseEvent.CLICK, onClickC);
d.addEventListener(MouseEvent.CLICK, onClickD);
_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(eventhttp://www.arduino.cn/static/image/smiley/default/tongue.gifrogressEvent):void
{
var data:String = _socket.readUTFBytes( _socket.bytesAvailable );
buffer += data;
var msg:String;
var index:int;
//下面是把接受到的字符拼起来
while((index = buffer.indexOf(dataover)) > -1)
{
msg = buffer.substring(0, index);
buffer = buffer.substring(index + 1);
trace("Message Received from Arduino : " + msg);
xsarduinotime.width=400; //文本框的宽度200
xsarduinotime.x=100; //文本框的位置
xsarduinotime.y=10;
xsarduinotime.text=msg; //显示time from arduino
var format:TextFormat = new TextFormat(); //新建文字格式format
format.size=24; //文字大小24
xsarduinotime.setTextFormat(format); //将文字格式赋予xsarduinotime文本框
addChild(xsarduinotime);
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////
//下面就是onclick程序,就是点击按钮时要做的
private function onClickA(event:MouseEvent):void
{
trace("onClick-A");
if(!_socket.connected) //假如没有连接上,发送你要连什么的
{
trace("You must be connected to send a command to the Arduino.");
return;
}
//_socket.writeUTFBytes(lianxi);//如果连接上,就发联系字符给arduino
_socket.writeUTFBytes(lianxia);
_socket.flush();//发送
}
private function onClickB(event:MouseEvent):void
{
trace("onClick-B");
if(!_socket.connected) //假如没有连接上,发送你要连什么的
{
trace("You must be connected to send a command to the Arduino.");
return;
}
//_socket.writeUTFBytes(lianxi);//如果连接上,就发联系字符给arduino
_socket.writeUTFBytes(lianxib);
_socket.flush();//发送
}
//下面定义关掉arduino时,显示Socket Closed
private function onClickC(event:MouseEvent):void
{
trace("onClick-C");
if(!_socket.connected) //假如没有连接上,发送你要连什么的
{
trace("You must be connected to send a command to the Arduino.");
return;
}
//_socket.writeUTFBytes(lianxi);//如果连接上,就发联系字符给arduino
_socket.writeUTFBytes(lianxic);
_socket.flush();//发送
}
private function onClickD(event:MouseEvent):void
{
trace("onClick-D");
if(!_socket.connected) //假如没有连接上,发送你要连什么的
{
trace("You must be connected to send a command to the Arduino.");
return;
}
//_socket.writeUTFBytes(lianxi);//如果连接上,就发联系字符给arduino
_socket.writeUTFBytes(lianxid);
_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);
}
}
}
//////////////////////////////////////////////arduino段的代码、、、、、、、、、、、、、、、、、、、、、、、
[#define LED_PIN4 4
#define LED_PIN5 5
#define LED_PIN6 6
#define LED_PIN7 7
#define lianxia 'aa'
#define lianxib 'bb'
#define lianxic 'cc'
#define lianxid 'dd'
int a1=0;
int b1=0;
int c1=0;
int d1=0;
#define dataover "$" //定义一个发送字符结束标记,也随意定
char incoming ;
void setup()
{
pinMode(LED_PIN4, OUTPUT);
pinMode(LED_PIN5, OUTPUT);
pinMode(LED_PIN6, OUTPUT);
pinMode(LED_PIN7, OUTPUT);
//pinMode(LED_PIN, OUTPUT); //定义LED_PIN端口为输出端口
for(int i = 0; i < 1; i++) //接通电源后4个led分别闪下
{ digitalWrite(LED_PIN4, HIGH);
delay(500);
digitalWrite(LED_PIN4, LOW);
delay(500);
digitalWrite(LED_PIN5, HIGH);
delay(500);
digitalWrite(LED_PIN5, LOW);
delay(500);
digitalWrite(LED_PIN6, HIGH);
delay(500);
digitalWrite(LED_PIN6, LOW);
delay(500);
digitalWrite(LED_PIN7, HIGH);
delay(500);
digitalWrite(LED_PIN7, LOW);
delay(500);
}
Serial.begin(9600); //串口开始,波特率9600
Serial.print("Arduino to flash ready!");//连接上电脑时发送一个字符串
Serial.print(dataover); //发送结束字符
}
void loop()
{
while(Serial.available() > 0)
{
incoming = Serial.read();
switch(incoming)
{
case lianxia: if(a1==0){
digitalWrite(LED_PIN4, HIGH);
a1=1;}
else{
digitalWrite(LED_PIN4, LOW);
a1=0;}
break;
case lianxib: if(b1==0){
digitalWrite(LED_PIN5, HIGH);
b1=1;}
else{
digitalWrite(LED_PIN5, LOW);
b1=0;}
break;
case lianxic: if(c1==0){
digitalWrite(LED_PIN6, HIGH);
c1=1;}
else{
digitalWrite(LED_PIN6, LOW);
c1=0;}
break;
case lianxid: if(d1==0){
digitalWrite(LED_PIN7, HIGH);
d1=1;}
else{
digitalWrite(LED_PIN7, LOW);
d1=0;}
break;
}
}
}
现在的问题是在Flash端口点击后led闪烁一下马上就灭啊
多谢分享,终于看到flash的编程了,额,这是c++么?
页:
[1]