利用Microsoft Robotics Studio远程控制机器人
2009-05-21 08:30:05 来源:WEB开发网LEGO NXT机器人使用一个蓝牙接口,当连接蓝牙后,它会呈现为PC的一个串口提供给用户使用,下面的代码段实现了如何读写串口,这一步最重要的两个部分是:1、确保有权限使用这个串口;2、在合适的位置处理从串口输入的数据。
如何设置串口:
SerialPort serialPort = new System.IO.Ports.SerialPort();
void Open(int comPort, int baudRate)
{
serialPort = new SerialPort("COM" + comPort.ToString(), baudRate);
serialPort.Encoding = Encoding.Default;
serialPort.Parity = Parity.None;
serialPort.DataBits = 8;
serialPort.StopBits = StopBits.One;
serialPort.DataReceived += new SerialDataReceivedEventHandler(serialPort_DataReceived);
serialPort.Open();
}
//Send data that your robot understands
void SendData(byte[] buffer)
{
serialPort.Write(buffer, 0, buffer.Length);
}
假如你在用蓝牙,你可能需要添加一个header,它包括的消息(message)的长度。当从COM口接收到数据后,你应该向服务的内部端口(internal port)提交数据,如果想更新服务的状态,你要确保消息的处理方法是独占使用这个服务的状态的,也就是要获得服务状态的锁,这样才可以改变服务的状态。
关于 内部端口(internal port)、服务(Service)、消息(Message)等名词的定义请查看相关资料 。
1 void serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
2 {
3 //
4 //Do not modify your state yet
5 _myRobotInboundPort.Post(sensorMsg);
6 }
7 //
8 protected override void Start()
9 {
10 Interleave mainInterleave = ActivateDsspOperationHandlers();
11 mainInterleave.CombineWith(new Interleave(
12 new TeardownReceiverGroup(),
13 new ExclusiveReceiverGroup(
14 Arbiter.ReceiveWithIterator(true, _myRobotInboundPort, MyRobotSensorMessageHandler)
15 ),
16 new ConcurrentReceiverGroup()
17 ));
18 }
19 private IEnumerator MyRobotSensorMessageHandler(SensorNotification sensorMessage)
20 {
21 //update state here
22 _state.sensor = sensorMessage.sensor;
23 //
24 }
25 //
26
更多精彩
赞助商链接