我正在制作一个通过蓝牙连接到OBD-II设备(ELM327 - http://www.dx.com/p/elm327-bluetooth-odb2-v1-5-car-diagnostic-interface-126921#.V86wdih97IU)的Android应用程序。
我也在使用https://github.com/pires/obd-java-api/库从设备获取数据。
我能够连接到设备并获得数据而没有任何问题但是当我尝试检索距离时,它总是以KM返回它。有没有办法以米为单位获得旅行的距离?
我尝试使用Torque Lite应用程序(https://play.google.com/store/apps/details?id=org.prowl.torquefree&hl=en),并且能够在KM中返回一个小数位(0.0 KM)的Trip距离。
想知道它用于实际获取值的命令,还是从其他内容派生的命令。
答案 0 :(得分:6)
不幸的是,行进距离的标准PID根本不存在。有关标准PID的列表,请参阅this。
您现在使用的代码DistanceSinceCCCommand
使用标准模式01 PID 0x31来检索自上次清除代码命令以来驱动的距离。 PID具有整数千米的单位,因此无法为您提供所需的精度。
我尝试使用Torque Lite应用程序(https://play.google.com/store/apps/details?id=org.prowl.torquefree&hl=en)并且能够返回KM中的行程距离,小数点后一位(0.0 KM)。
扭矩应用程序使用来自Android设备的位置(GPS)信息来记录地理位置。我猜它正在使用该信息来确定到0.1km精度的行程距离。
如果您需要这种准确性,我建议您按照他们的主导并使用位置数据来确定行程距离。
使用google location api和Location.distanceTo(location)中的位置监听器来确定增量位置更改。
增强型PID(也称为DID)是车辆特定的模式22参数。
还有许多其他车辆参数未公开记录,可能提供更好的精度。它们是特定于车辆的(但通常是来自同一制造商的车辆的子集)。它们是模式22增强型PID。 Here's a list of old Ford DIDs。如果有人可以找到更新的模式22 DID列表,请编辑我的帖子并添加它,因为我知道有比我公开发现的更多。
答案 1 :(得分:3)
您可以读取OBD-II模式1,PID 0D以定期获得速度。如果您经常阅读并应用距离=速度*时间计算,这将以米为单位提供适当的距离读数。
答案 2 :(得分:0)
大多数类实现
ObdCommand
有一个方法
useImperialUnits(boolean)
所以,如果你使用DistanceSinceCCCommand,那么
DistanceSinceCCCommand distanceSinceCCCommand = new DistanceSinceCCCommand();
distanceSinceCCCommand.useImperialUnits(true);
会进行转换。 如果检查库源,可以找到有趣的东西。
答案 3 :(得分:0)
您也可以使用
getImperialUnit()
如果您只想要数字值而不是带有尾随单位标签的字符串。