Android OBD响应转换为十进制

时间:2017-06-25 16:01:14

标签: android hex obd-ii

在我的应用程序中,我向OBD端口发送四个基本命令并获取十六进制数据... 我不知道为什么我发送命令:

ME:010c

汽车:10c410c0000

为什么消息不以4开头? 只获得410c和obd从汽车收到的数据?

我使用此方法来管理十六进制响应并将其转换为人类可读数据,而RawData是一个String,它接收消息并清除所有空间,如下所示 41 0c 00 00 = 410c0000

   public String getCalculatedResult() {

        //TODO devo convertire i dati da esadecimale a decimale ed effettuare i calcoli
        int calculatedData = 0;
        String dataToShow = null;

        //Log.d("ObdCommand", "rawData: " + rawData.substring(3));
        calculatedData = Integer.parseInt(rawData.substring(7), 16);


        if (Pattern.compile(Pattern.quote(rawData.substring(3,4)),
                    Pattern.CASE_INSENSITIVE).matcher("410D").find()){

            Log.d("ObdCommand", "dentro 410D: ");
            //Velocità veicolo km/h

            dataToShow = String.valueOf(calculatedData) + " Km/h";
            Log.d("ObdCommand", "rawData: " + dataToShow);

        }else if (Pattern.compile(Pattern.quote(rawData.substring(3,4)),
                Pattern.CASE_INSENSITIVE).matcher("410C").find()){

            Log.d("ObdCommand", "dentro 410C: ");

            //Giri minuto veicolo rpm
            calculatedData = calculatedData/4;

            dataToShow = String.valueOf(calculatedData) + " rpm";

        }else if (rawData.substring(3).startsWith("4105")){

            //Temperatura refrigetante C°
            calculatedData = calculatedData - 40;

            dataToShow = String.valueOf(calculatedData) + " C°";


        }else if (rawData.substring(3).startsWith("4151")){
            //Tipo di carburante
            if (rawData.substring(7).startsWith("09")){

                //Benzina
                dataToShow = "Benzina";

            }else if (rawData.substring(7).startsWith("0d")){

                //Metano
                dataToShow = "Metano";
            }
        }


        return dataToShow;
    }

我使用rawData.substring(7)因为3是我在帖子开头告诉的字符

10℃

其他4个是

410C

所以我只获得十进制所需的值...但有时我会超出界限......

有人有一些想法可以解决这个问题吗?

由于

0 个答案:

没有答案