要发送到OBD的命令格式(Android)

时间:2013-12-03 16:58:10

标签: java android elm327

无法确定如何格式化我发送到OBD设备的命令。 首先关闭Torque工作正常,所以我知道我的代码是问题而不是设备。

以下是我发送命令的方式:

public void run() {

            byte[] buffer = new byte[1024];  // buffer store for the stream
            int bytes; // bytes returned from read()

            // Keep listening to the InputStream until an exception occurs
            while (true) {
                try {
                    // Read from the InputStream
                    byte[] command = new byte[5];
                    command[0] = rawToByte(268);
                    //command[1] = rawToByte(269);

                    Log.i("gas", "Command: "+Byte.toString(command[0]));
                    write(command);
    /////////////////////////////////////////    problem with below line               
                    bytes = mmInStream.read(buffer);
                    Log.i("gas", "Response: "+Integer.toString(bytes));
                    try {
                        sleep(1000);
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                } catch (IOException e) {
                    break;
                }
            }
        }

这是基于我正在做的一些研究,如果有人可以建议一个简单的方法,那将不胜感激。 268是“010C”的十进制等值,它是根据elm327表格的发动机转速代码。

我的write()方法:

public void write(byte[] bytes) {
            try {
                mmOutStream.write(bytes);
                mmOutStream.flush();

            } catch (IOException e) { }
        }

我的rawToByte()方法:

public byte rawToByte(int b) {
            return (byte) (0xff & b);
        }

响应日志cat每次读取“5”,如果我使用269作为速度则相同。这可能是我发送命令错误的错误代码。 套接字mmOutStream上的write()方法只占用字节,而我从这里得到的一些问题得到的rawToByte方法(它没有回答这个问题)只占用整数,所以我不能把它“010C”给它,但这不应该有所作为

我的应用程序需要不断获得车辆的速度和转速。

任何人都可以(简单地)指定如何正确地向OBDII Elm327设备发送命令吗?

1 个答案:

答案 0 :(得分:0)

我不确定你是否仍然需要一个答案,但我会尝试这样做:

String message = "010D\r";
mmOutStream.write(message.getBytes());
byte[] buffer = new byte[1024];
mmInStream.read(buffer);

然后将缓冲区转换回字符串。您可能需要添加几个步骤来从阵列中删除空字节以获得您要查找的结果。希望有所帮助!