让我的串行端口与我的Adobe Air应用程序通信

让我的串行端口与我的Adobe Air应用程序通信,air,serial-port,byte,Air,Serial Port,Byte,我遇到了这个问题,我需要一个简单的医疗设备来向我的AdobeAIR应用程序输出一串逗号分隔的数字。我只是很高兴能与web服务之外的东西交谈 因此,我得到了一个USB到串行适配器,插入我的计算机,并使用一个名为的程序从机器上读取: 0,1,71.0234.2453,31.1,72.8161.4118.2,30,32.79336 成功!所以我在谷歌上搜索了一下,这似乎是一个方便的工具,Arduino爱好者正使用它来完成我所需要的:从串行到闪存。所以我下载、安装和配置如下: newlines_to_n

我遇到了这个问题,我需要一个简单的医疗设备来向我的AdobeAIR应用程序输出一串逗号分隔的数字。我只是很高兴能与web服务之外的东西交谈

因此,我得到了一个USB到串行适配器,插入我的计算机,并使用一个名为的程序从机器上读取:

0,1,71.0234.2453,31.1,72.8161.4118.2,30,32.79336

成功!所以我在谷歌上搜索了一下,这似乎是一个方便的工具,Arduino爱好者正使用它来完成我所需要的:从串行到闪存。所以我下载、安装和配置如下:

newlines_to_nils=false

serial_device1=/dev/cu.usbserial


comm_ports=1,2,3,4

comm_baud=2400
comm_databits=7
comm_stopbits=1
comm_parity=even

timeout=300

net_port1=5331 
...
这些设置与我在玉米片中使用的设置相同。我插入一些简单的actionscript来侦听事件,当我捕获数据事件时,我会执行以下操作:

private function onSocketData(event:Event):void {
  var data:String = socket.readUTFBytes(socket.bytesAvailable);
  trace(data);
}
var data:String = socket.readMultiByte(bytes.bytesAvailable, "us-ascii");
这输出了胡言乱语:

-±·±.0,3,0,53,3±。±6±±±±±±±±±¨0¨3¨3¨6¨93 3±

所以我假设我没有读到正确的编码。看起来应该是ascii码,所以我这样做:

private function onSocketData(event:Event):void {
  var data:String = socket.readUTFBytes(socket.bytesAvailable);
  trace(data);
}
var data:String = socket.readMultiByte(bytes.bytesAvailable, "us-ascii");
没有骰子。所以我开始尝试一系列不同的编码,得到同样的胡言乱语。我将串行端口更改为tty.usbserial,尝试翻转换行标志,所有结果都相同。因此,我沮丧地读了前几个字节,看看我从serproxy中得到了什么:

trace(socket.readByte().toString());
看起来我得到的是负数:

48-84-79-84-73-794648-84-7851-7646-78-84-765348-8451484657-84-73-7846-76-84-7954-7946-72-84-79-7246-76-845148-8451-7846-73-84575154-11510

不知道这意味着什么,我羞愧地低下头,弯腰走向stackoverflow,希望有人能教我在serialports101中显然从未学过的东西

[解决方案]

我遇到的问题是ActionScript无法读取奇偶校验位。因此,当它看到10101100(44,偶数奇偶校验位翻转)时,它将其读取为-84。现在这可能看起来很奇怪,就像对我一样,所以你会想在维基百科上看到它

现在,为了解决这个奇怪的问题,我们只需要确保如果奇偶校验位翻转为1,我们将其翻转回零。这样做很简单,因为ActionScript将奇偶校验位读取为负字节

var-text:String=”“;
var tmp:int=socket.readByte();
var-charCode:int代码;
if(tmp<0)//检查奇偶校验位是否翻转为1
{
code=tmp&0x7F;//将奇偶校验位重置为0
}
其他的
{
code=tmp;//如果奇偶校验位为0,则无需执行任何操作
}
text+=String.fromCharCode(代码);
好了

[/SOLUTION]48十进制=0(零)

所以,你是一个正确的轨道;相反,打印它们的数值(并在奇偶校验位上花费一些时间)

[编辑]
还要注意46十进制=。(期间)
54十进制=6(六)
51十进制=3(三)

最后,请注意,0,1,71.0234.2453,31.1,72.8161.4118.2,30,32.79336与±.0-3².6-933的连接并非巧合

所以你实际上比你想象的更接近。

[/edit]

Hmmm,我有点明白你对ascii码的看法。46 = . 把它泄露出去了。现在奇偶校验位与此有什么关系?例如,将设置更改为8N1(从7E1)-看起来(有点)每7或8个字节都是正确的,其他字节都是错误的,这导致我的字符大小无效。例如,-84=ffAC,但是-ffBC是44(逗号的字符)-这是一个让我思考的一点差异+1。但是,我没有看到我的胡言乱语的“非巧合连接:)字符3 6 933在两个字符串中,因此您读取数据的波特率(可能)正确,但您的字符大小/奇偶校验/停止位不正确。是试验的时候了。凯文,你在这里赢得了胜利。一旦一切正常,我就会发布答案。谢谢你的帮助。(答案与actionscript不需要奇偶校验位并将其视为符号位有关)。我想我正在慢慢地弄明白这一点,因为serproxy的配置文件在更改它时给了我一些奇怪的结果。K,完成后我会发布代码,但actionscript似乎在读取字节方面做得很好,不知道奇偶校验位是什么。因为我给它输入奇偶校验位,它不知道该怎么处理它们。