求助:如何通过Arduino按钮控制Flash AS3跳转指定帧
需求:实现Arduino按钮反向控制Flash帧跳转
我已经完成了Flash AS3控制Arduino的功能,相关源码如下。现在需要实现反向控制:当按下Arduino引脚13连接的按钮时,让Flash跳转到并停止在帧1或帧2,恳请技术帮助。
现有可正常运行的代码
Flash端Arduino连接代码(AS3)
import flash.net.Socket; var _socket:Socket = new Socket(); var _proxyAddress:String = "127.0.0.1"; var _proxyPort:uint = 5331; _socket.addEventListener(Event.CONNECT, onConnect); _socket.connect(_proxyAddress, _proxyPort); function onConnect(event:Event):void{ trace("Socket Connected"); }
Flash控制Arduino开关的帧代码(AS3)
// 帧1代码 MovieClip(root)._socket.writeUTFBytes("f"); MovieClip(root)._socket.flush(); // 帧2代码 MovieClip(root)._socket.writeUTFBytes("n"); MovieClip(root)._socket.flush();
Flash按钮控制代码(AS3)
onBtn.addEventListener(MouseEvent.MOUSE_DOWN,btn1); function btn1(evt:MouseEvent):void { gotoAndStop(1); } offBtn.addEventListener(MouseEvent.MOUSE_DOWN,btn2); function btn2(evt:MouseEvent):void { gotoAndStop(2); }
Arduino端代码
#define BULB 13 int incoming = LOW; void setup(){ Serial.begin(57600); Serial.println("INITALIZING"); pinMode(BULB, OUTPUT); Serial.println("READY"); } void loop(){ if(Serial.available () > LOW ){ incoming = Serial.read(); if(incoming == 'n'){ digitalWrite(BULB, LOW); } else if(incoming == 'f'){ digitalWrite(BULB, HIGH); } } }
反向控制实现方案
一、Arduino端代码修改
给引脚13连接按钮(建议使用内部上拉电阻简化接线),修改代码检测按钮状态并向串口发送帧跳转指令:
#define BULB 13 #define BUTTON_PIN 13 // 按钮连接至引脚13 int incoming = LOW; int lastButtonState = HIGH; // 内部上拉初始为高电平 int currentButtonState; int targetFrame = 1; // 初始跳转目标帧 void setup(){ Serial.begin(57600); Serial.println("INITALIZING"); pinMode(BULB, OUTPUT); pinMode(BUTTON_PIN, INPUT_PULLUP); // 启用内部上拉电阻 Serial.println("READY"); } void loop(){ // 保留原有的Flash控制Arduino逻辑 if(Serial.available () > LOW ){ incoming = Serial.read(); if(incoming == 'n'){ digitalWrite(BULB, LOW); } else if(incoming == 'f'){ digitalWrite(BULB, HIGH); } } // 检测按钮状态,发送帧跳转指令 currentButtonState = digitalRead(BUTTON_PIN); if(currentButtonState != lastButtonState){ delay(50); // 按键消抖 currentButtonState = digitalRead(BUTTON_PIN); if(currentButtonState == LOW){ // 按钮按下时电平为低 // 交替发送帧1、帧2指令 Serial.print(String(targetFrame)); targetFrame = targetFrame == 1 ? 2 : 1; } lastButtonState = currentButtonState; } }
二、Flash端(AS3)代码修改
给Socket添加数据接收监听,处理Arduino发来的指令实现帧跳转:
import flash.net.Socket; import flash.events.ProgressEvent; import flash.events.Event; var _socket:Socket = new Socket(); var _proxyAddress:String = "127.0.0.1"; var _proxyPort:uint = 5331; _socket.addEventListener(Event.CONNECT, onConnect); _socket.addEventListener(ProgressEvent.SOCKET_DATA, onDataReceived); // 新增数据接收监听 _socket.connect(_proxyAddress, _proxyPort); function onConnect(event:Event):void{ trace("Socket Connected"); } // 处理Arduino发来的指令 function onDataReceived(event:ProgressEvent):void{ var receivedCmd:String = _socket.readUTFBytes(_socket.bytesAvailable); trace("Received from Arduino: " + receivedCmd); // 根据指令跳转对应帧 switch(receivedCmd){ case "1": gotoAndStop(1); break; case "2": gotoAndStop(2); break; } }
关键注意事项
- 按钮接线:一端接引脚13,另一端接GND(因启用内部上拉,无需额外电阻)
- 确保串口波特率统一:Arduino、Flash代理工具均设为57600
- 确认Flash代理工具正常转发串口数据至指定端口5331
内容的提问来源于stack exchange,提问作者Mohtadeen Mastoor
相关产品推荐
相关产品推荐

