我使用distriqt的蓝牙ANE通过Adafruit的Bluefruit UART设备连接到arduino。
我可以连接,找到UART服务,找到特征等。
但是,当我将数据发送到设备的tx特性时,我没有得到预期的响应 - 所有更新都给出了rx特征值的长度零长度。 / p>
我有Bluefruit应用程序,当我通过UART消息传递工具发送命令时,可以看到正确的响应。如果我发送一个无意义的命令,我只得到零长度响应。
这让我想知道数据是否以正确的格式发送。这样做的AS3代码是:
var value:ByteArray = new ByteArray();
value.writeUTFBytes( msg );
sendUpdateMsg("trying to write to tx - value: " + msg);
var readSuccess:Boolean = _peripheral.readValueForCharacteristic(_rxChannel);
sendUpdateMsg("trying to read from rx before tx - outcome: " + readSuccess);
var success:Boolean = _peripheral.writeValueForCharacteristic( _txChannel, value );
sendUpdateMsg("trying to write to tx - outcome: " + success);
sendUpdateMsg
函数只是将消息写入屏幕上的日志。更新rx特性时,事件处理程序为:
private function peripheral_characteristic_updatedHandler( event:CharacteristicEvent ):void
{
sendUpdateMsg( "peripheral characteristic updated: " + event.characteristic.uuid );
sendUpdateMsg( "length="+ event.characteristic.value.length.toString() );
sendUpdateMsg( "value="+ event.characteristic.value.readUTFBytes( event.characteristic.value.length ) );
}
这总是输出零长度而没有值。
例如,如果我发送"!D",我是否需要以不同的方式对待它:
var value:ByteArray = new ByteArray();
value.writeUTFBytes( "!D" );
为了让UART服务正确接收它?
我无法立即访问arduino方面的东西 - 我可以要求开发人员为我添加一些调试 - 回应一下废话消息的感觉 - 但这不会发生快点。
答案 0 :(得分:1)
问题是我在邮件末尾丢失了一个LF字符(0x0A)。
这有效:
var value:ByteArray = new ByteArray();
value.writeUTFBytes( msg );
if(value[value.length-1] != 0x0A) {
value.writeByte(0x0A);
}
...并允许我只在需要时添加0x0A - 取决于msg内容是来自文本输入还是来自编码字符串。
答案 1 :(得分:0)
这可能是编码相关的问题,尽量不要使用字符串,只是字节intead
var ba:ByteArray = new ByteArray()
//Instead of "!D"
ba.writeByte(33);
ba.writeByte(68);