Java 发送到OBD的命令格式(Android)
无法确定如何格式化发送到OBD设备的命令。 第一个扭矩工作正常,所以我知道这是我的代码,这是问题,而不是设备 以下是我发送命令的方式: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
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);