我遇到过这个问题,我需要一个简单的医疗设备来输出一串逗号分隔的数字到我的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-0'53¬3±.±¬·¸.¸±6±.±¬¸ω30¬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.现在这可能看起来很奇怪,就像它对我一样,所以你想在维基百科上阅读所有关于它的内容.
现在,为了解决这个奇怪的问题,我们只需要确保如果将奇偶校验位翻转为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);
所以你有它.
[/解]