Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 发送到OBD的命令格式(Android)_Java_Android_Elm327 - Fatal编程技术网

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

Java 发送到OBD的命令格式(Android),java,android,elm327,Java,Android,Elm327,无法确定如何格式化发送到OBD设备的命令。 第一个扭矩工作正常,所以我知道这是我的代码,这是问题,而不是设备 以下是我发送命令的方式: public void run() { byte[] buffer = new byte[1024]; // buffer store for the stream int bytes; // bytes returned from read() // Keep listening t

无法确定如何格式化发送到OBD设备的命令。 第一个扭矩工作正常,所以我知道这是我的代码,这是问题,而不是设备

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

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表,010C是发动机转速的代码

我的write()方法:

还有我的rawToByte()方法:

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

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


有人能(简单地)指定如何正确地向OBDII Elm327设备发送命令吗?

我不确定您是否仍然需要答案,但我将尝试以下方法:

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

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

有人吗?我已经过了最后期限了,因为我不知道这里发生了什么。任何帮助都将获得书面表扬!感谢您的回复,我在发动机运转的情况下尝试了您建议的“010C/r”,得到的回复是。“5”,“12”然后我不断地得到“17”。同时,我在发动机运转时加速了发动机,这没有什么区别。发动机在运行应用程序之前已运行,因此如果返回的值为实际转速值,则它们应相同。使用“010D/r”也进行了尝试,结果完全相同您是在转换回字符串还是在查看响应的原始字节?我使用的logcat是这样的:Log.I(“gas”,“response:+mmInStream.read(buffer));尝试执行
Log.i(“gas”,“Response:”+新字符串(缓冲区))这将把字节转换成真正的字符串。好吧,如果我们有进展,我附加了一个链接到我的日志文件,忽略应用程序另一部分的“getting Location…”消息。表示CAN错误,在引擎运行的情况下运行应用程序,然后异常停止了连接,忘记打印堆栈跟踪,但我假设obd设备停止响应
public byte rawToByte(int b) {
            return (byte) (0xff & b);
        }
String message = "010D\r";
mmOutStream.write(message.getBytes());
byte[] buffer = new byte[1024];
mmInStream.read(buffer);