As3 读取long类型的数字

本文详细介绍了在AS3环境下通过自定义方法实现Long类型的读取与发送,解决了与后台交互时Long类型数据无法直接处理的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

AS3 由于只有  int, uint, Number类型;所以再跟后台交互时 无法读取Long;(及没有 socket.readLong的方法);
但后台很多时候 想传long 类型的值; 如时间, 较大数额的钱;

于是写了个 读取long 方法;
static public function readLong( bytes:ByteArray):Number
{
var long:String = "0x";
for (var i:int = 0; i < 8; i++)
{
var numStr:String = bytes.readUnsignedByte().toString(16);
var hexStr:String = numStr.length == 1 ? "0"+numStr : numStr;
long += hexStr;
}
return parseInt( long);
}

后来项目又需要 发送long; 于是又写了一个 写入long的方法:
static public function writeLong( bytes:ByteArray, value:Number):void
 {
            var str:String = value.toString(16);
            var lgth:int = 16 - str.length;
            for( var i:int = 0; i < lgth; i++)
            {
                str = "0" + str;
            }

            var subStr:String = str.substr( 0, 8);           
            bytes.writeUnsignedInt( parseInt( "0x" + subStr));
            subStr = str.substr( 8, 8);
            bytes.writeUnsignedInt( parseInt( "0x" + subStr));

 }


注意一点的是:  由于AS3中Number型采用的是浮点数格式, 能表示的最大有效位是52位,    所以用Number来存储long的数据,不能超过52位;   不然就会出问题

### 使用 PWM 接口读取 AS5600 磁性旋转编码器的角度数据 AS5600 是一款支持多种输出接口的高分辨率磁性旋转位置传感器,其中包括 **12 位 PWM 输出**。这种模式可以用于直接通过微控制器(如 Arduino、STM32)的 PWM 输入引脚获取角度信息,而无需依赖 I²C 或模拟电压接口。PWM 输出方式在某些嵌入式系统中具有更高的实时性和稳定性。 #### PWM 输出特性 - **输出周期固定**:通常为 **1.2 ms 或 3.3 ms**,具体取决于器件配置。 - **占空比表示角度值**:0° 对应 **最小占空比**,360° 对应 **最大占空比**。 - **精度可达 12 位**:即分辨率为 $ \frac{360^\circ}{4096} \approx 0.0879^\circ $ [^2]。 #### 硬件连接 使用 PWM 输出时,需要将 AS5600 的 PWM 引脚连接到 MCU 的输入捕获通道或具备 PWM 输入功能的引脚。典型接线如下: - VDD: 接电源(3.3V 或 5V) - GND: 接地 - PWM: 连接到 MCU 的 PWM 输入引脚 - DIR: 控制旋转方向输出极性(接地为顺时针增加角度值)[^5] #### 示例代码(Arduino) 以下是一个使用 **Arduino UNO** 读取 AS5600 PWM 输出并计算角度的示例程序: ```cpp const int pwmPin = 3; // 使用数字引脚3作为PWM输入 unsigned long pulseStart = 0; unsigned long pulseWidth = 0; bool pulseStarted = false; void pulseISR() { unsigned long now = micros(); if (!pulseStarted) { pulseStart = now; pulseStarted = true; } else { pulseWidth = now - pulseStart; pulseStarted = false; } } void setup() { Serial.begin(9600); pinMode(pwmPin, INPUT); attachInterrupt(digitalPinToInterrupt(pwmPin), pulseISR, CHANGE); // 捕捉上升沿和下降沿 } void loop() { if (!pulseStarted && pulseWidth > 0) { float angle = map(pulseWidth, 500, 2500, 0, 360); // 假设脉宽范围为500~2500us对应0~360度 Serial.print("Angle: "); Serial.print(angle); Serial.println(" degrees"); } delay(100); // 控制输出频率 } ``` #### 注意事项 1. **校准脉宽范围**:不同批次的 AS5600 可能存在输出差异,建议使用实际测量值进行校准。 2. **滤波处理**:可对采集到的脉宽值进行滑动平均或低通滤波以提高稳定性。 3. **抗干扰设计**:由于 PWM 信号容易受电磁干扰影响,建议采用屏蔽线并靠近 MCU 输入端加装 RC 滤波电路 [^4]。 4. **方向控制**:通过设置 DIR 引脚电平可调整角度变化方向,确保与机械旋转一致 [^5]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值