通过Android应用程序从乐高超声波/颜色传感器读取数据

时间:2012-12-01 22:54:25

标签: android sensor lego

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

1 个答案:

答案 0 :(得分:0)

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

因此 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。告诉NXT,您已经准备好使用LSGETSTATUS(0x0E)命令接收答案。

因此 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,字节1,字节2,字节3,……,字节19} ,其中:

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,以不断询问传感器的距离。