2

我正在开发用于控制 Lego Mindstorm 的 Android 应用程序。我已经完成了基本操作(我可以连接、发送、接收消息),所以我可以控制电机。但我对传感器有疑问。我连接了超声波和颜色传感器。为了控制超声波传感器,我发送了一条带有 Lowspeed9V 和 Rawmode 参数的消息 SETINPUTMODE,但是当我使用 GETINPUTVALUES 时,它总是返回距离 0。我尝试在消息中使用其他传感器类型,但它返回 0 或不随实际距离变化的值。对于颜色传感器,无论我使用什么参数,它都不会发光(传感器工作正常,我直接在 NXT 和 PC 上检查过)。我需要的是一个建议,无论我做错了什么,还是一个不需要在机器人上安装任何东西的工作代码,因为它是学校的财产。谢谢

4

1 回答 1

0

1. 使用参数 LOWSPEED__9V (0x0B) 和 RAWMODE (0x00) 的 SETINPUTMODE (0x05) 命令设置输入模式。

因此,SETINPUTMODE命令将发送以下字节{0x00, 0x05, 0x03, 0x0B, 0x00},其中:

 0x00: DIRECT REPLY or 0x80 DIRECT NO REPLY
 0x05: SETINPUTMODE
 0x03: Port where the sensor is connected. The documentation recommends port 4 for ultrasonic sensor.
 0x0B: LOWSPEED__9V
 0x00: RAWMODE

2. 使用 LSWRITE (0x0F) 命令告诉 NXT 您希望得到多少字节的答案。

因此LSWRITE命令将发送以下字节{0x00, 0x0F, 0x03, 0x02, 0x01, 0x02, 0x42},其中:

0x00: DIRECT REPLY or 0x80 DIRECT NO REPLY
0x0F: LSWRITE
0x03: Port where the sensor is connected. The documentation recommends port 4 for ultrasonic sensor.
0x02: Tx -> Transmitted Data Length
0x01: Rx -> Receive Data Length
0x02: Byte 5 is the i2c address of the device, for the NXT it is usually 0x02.
0x42: This is the register you are attempting to write to. It is device dependent. For the NXT Ultrasonic Sensor 0x41 is used for commands, and the read registers are in 0x42 to 0x49 so you could use any from 0x42 to 0x49.

3. 使用 LSGETSTATUS (0x0E) 命令告诉 NXT 您已准备好接收答案。

因此LSGETSTATUS命令将发送以下字节{0x00, 0x0e, 0x03},其中:

0x00: DIRECT REPLY
0x0E: LSGETSTATUS
0x03: Port where the sensor is connected. The documentation recommends port 4 for ultrasonic sensor.

4. 等待成功值 = 0x00 的回复。

因此,一旦达到这一点,您必须继续发送LSGETSTATUS命令,直到您获得成功(0),因为这意味着答案已准备好阅读。如果LSGETSTATUS回复返回一个不同于 0 的值,那么答案还没有准备好。给它一些时间,也许是 300 毫秒。

正确的回复数据将如下所示{0x02, 0x0e, 0x00, 0x01}其中:

0x02: REPLY
0x0E: LSGETSTATUS
0x00: SUCCESS (different from 0x00 means a specific error. Take a look at the documentation if you need to)
0x01: Bytes ready to be read.

5. 使用 LSREAD (0x10) 命令读取值。

因此LSREAD命令将发送以下字节{0x00, 0x10, 0x03},其中:

0x00: DIRECT REPLY
0x10: LSREAD
0x03: Port where the sensor is connected. The documentation recommends port 4 for ultrasonic sensor.

6. NXT 积木响应后,您将获得以厘米为单位的距离。

正确的回复数据将如下所示{0x02, 0x10, 0x00, 0x01, byte1, byte2, byte3, ......, byte19}其中:

0x02: REPLY
0x10: LSREAD
0x00: SUCCESS (different from 0x00 means a specific error. Take a look at the documentation if you need to)
0x01: Bytes that contains the answer. You asked for 1 byte.
byte1...byte19: Zero-padded -> HERE IS THE ANSWER

读取对应于数组第 5 个字节的答案的第一个字节。它的值将是传感器读取的距离。范围为 1 至 255 厘米。

7. 循环重复步骤 2 到 6,不断向传感器询问距离。

于 2018-11-08T03:43:15.130 回答