我遇到过这个问题,我需要一个简单的医疗设备来输出一串逗号分隔的数字给我的Adobe Air应用程序。我很高兴与网络服务之外的其他事情交谈!
所以,我有一个USB转串口适配器,插入我的电脑,并使用一个名为Cornflake的程序从机器上读取它:
0,1,71.0,234.2,453,31.1,72.8,161.4,118.2,30,32.7,9336
成功!所以我做了一些谷歌搜索,似乎 serproxy是一个方便的工具,Arduino buff正在使用它来完成我所需要的:串行到闪存。所以我下载,安装和配置如下:
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
...
这些与我在Cornflake中使用的设置相同。我插入一些简单的actionscript来监听一个事件,当我捕获数据事件时,我这样做:
private function onSocketData(event:Event):void {
var data:String = socket.readUTFBytes(socket.bytesAvailable);
trace(data);
}
这会输出乱码:
¬±¬·±.0¬²3'0''53¬3±。 ±¬·¸.¸±6±。±|¸.0¬03¬3².6¬933±
所以我假设我没有阅读正确的编码。好像它应该是ascii,所以我这样做:
var data:String = socket.readMultiByte(bytes.bytesAvailable, "us-ascii");
没有骰子。所以我开始尝试一堆不同的编码并得到同样的胡言乱语。我将串口改为tty.usbserial,尝试翻转换行标志,所有都具有相同的结果。所以,很沮丧,我读了前几个字节,看看我从serproxy中得到了什么:
trace(socket.readByte().toString());
看起来我得到了负数:
48 -84 -79 -84 -73 -79 46 48 -84 -78 51 -76 46 -78 -84 -76 53 48 -84 51 48 46 57 -84 -73 -78 46 -76 -84 - 79 54 -79 46 -72 -84 -79 -79 -72 46 -76 -84 51 48 -84 51 -78 46 -73 -84 57 51 51 54 -115 10
我不知道这意味着什么,我垂头丧气,徘徊到stackoverflow,希望那里的人可以教我在seriports101中我从未学过的东西。
[溶液]
我遇到的问题是ActionScript无法读取奇偶校验位。因此,当它看到10101100(偶数奇偶校验位翻转44)时,它读为-84。现在这可能看起来很奇怪,就像它对我一样,所以你想要在维基百科上read all about it。
现在,为了解决这个奇怪的问题,我们只需要确保如果将奇偶校验位翻转为1,我们就将其翻转回零。这样做很简单,因为ActionScript将奇偶校验位读取为负字节。
var text:String = "";
var tmp:int = socket.readByte();
var charCode:int code;
if(tmp < 0) //check to see if the parity bit was flipped to 1
{
code=tmp & 0x7F; //reset the parity bit to 0
}
else
{
code=tmp; //nothing to do if parity bit is 0
}
text+=String.fromCharCode(code);
所以你有它。
[/溶液
答案 0 :(得分:3)
48十进制= 0(零)
所以,你是一个正确的轨道;相反,打印它们的数值(并在奇偶校验位上花费一些时间)
[编辑]
另请注意,46十进制=。 (期间)
54十进制= 6(六)
51十进制= 3(三)
最后,请注意 0,1,71.0,234.2,453,31.1,72.8,161.4,118.2,30,32.7,9336 与±.0-的非巧合连接²3².6¬933.. 的
所以你实际上比你想象的要近一些 [/编辑]