我正在尝试使用蓝牙串行连接远程控制lego mindstorms NXT机器人。程序连接没有任何问题,但是当我发送单个命令时,它们在发送其他几个命令之前不会出现。然后它们全部出现在nxt上。
我已经尝试了所有东西(我可以想到或谷歌告诉我)但是我发不出缝来让缓冲区在命令发送后刷新。
任何人都知道我能做什么? 这是我的代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO.Ports;
namespace NXTBtRemote
{
public class BTHandler
{
SerialPort comm;
private string comPort;
public BTHandler()
{
comm = new SerialPort();
}
public Boolean Connect(string _comPort)
{
this.comPort = _comPort;
comm.PortName = comPort;
comm.Open();
if (comm.IsOpen) return true;
else return false;
}
public void sendCommand(Command command)
{
string msg = command.cmdType + "#" + command.arguments;
if (!comm.IsOpen) comm.Open();
comm.WriteLine(msg);
comm.DiscardOutBuffer();
}
}
}
希望索莫可以提供帮助。提前致谢 亲切的问候 - 肯尼思
答案 0 :(得分:1)
comm.DiscardOutBuffer();
那非常坏。你丢弃了刚写的字节。 WriteLine()方法将命令写入输出缓冲区,然后从缓冲区将命令缓慢写入串行端口。只有在调试代码时,单步执行代码,串口驱动程序才有足够的机会实际发送内容。如果芯片本身具有FIFO缓冲器,它将被击中或未命中。只需删除DiscardOutBuffer()调用,它只会造成伤害。
除此之外,你真的在抱怨收到回复的问题。但是没有显示任何进行任何Read调用的代码。