Page 1 of 1

DTC codes aren't P0xxx.

Posted: Mon Feb 20, 2017 6:50 am
by protomor
So the code I have to consume Stanley's DTC read is:
unsigned int numberofcodes = obd.getDTCCount();
lcd.println(numberofcodes);

if (numberofcodes > 0)
{
uint16_t codes[8];
byte dtcCount = obd.readDTC(codes, numberofcodes);
if (dtcCount == 0) {
lcd.println("No DTC");
}
else
{
for (byte i = 0; i < numberofcodes; i++)
{
lcd.println(codes[i]);
}
}
}


But I get 20484 and 16896 instead of the P codes. How do I convert this into one of the P codes?

Re: DTC codes aren't P0xxx.

Posted: Sat Feb 25, 2017 12:28 pm
by protomor
Staaaaaanleeeeeeeey HAAALP!

Re: DTC codes aren't P0xxx.

Posted: Wed Mar 15, 2017 11:54 am
by stanley
Convert it to HEX.

Serial.println(code[i], HEX);

There is no P as all readable codes are for P (powertrain).

Re: DTC codes aren't P0xxx.

Posted: Wed Mar 15, 2017 10:13 pm
by protomor
I thought I tried that but I'll give it another go.

Re: DTC codes aren't P0xxx.

Posted: Fri Feb 15, 2019 1:31 am
by vishwanath
I too face the similar issue reading the DTCs.

On converting to hex I got 100, 200, 300, 4300, 8200, c1 . I got 100,200,300 but how to match with 4300 and 8200 and c1
here is the my piece of code:
char* getDTC() {
uint16_t dtc[7] = {0};
static char dtcbuffer[100] = {0};

char dtc_codes[50] = {0};
int dtcCount = obd->readDTC(dtc, 7);
if (dtcCount > 0) {
Serial.print("DTC:");
Serial.println(dtcCount);

//Serial.print("Error codes are: ");
for (byte n = 0; n < dtcCount; n++) {

Serial.print(dtc[n],HEX);
Serial.print(", ");
sprintf(dtc_codes + strlen(dtc_codes), "%x, ", (dtc[n]));
}
//obd->clearDTC();
}
sprintf(dtcbuffer, "DTC:{%s} ", dtc_codes);

return dtcbuffer;
}



Can you please help me in getting all the DTCs and also to right way of matching the codes?

Re: DTC codes aren't P0xxx.

Posted: Tue Apr 16, 2019 9:57 pm
by tompage12
Thanks for sharing such useful ideas.

Re: DTC codes aren't P0xxx.

Posted: Sat Dec 07, 2019 7:12 pm
by alankroenlein
The readDTC function does a hex2uint16 conversion in the body of the code. I am getting a fault code of 770, which seems a bit unlikely since my car has a manual transmission. Any thoughts on how to interpret this output? Can anyone confirm that the fault codes of this function are indeed being returned as integers? 0x770 would be 302 in decimal, which would indicate a cylinder misfire. This seems more likely, but seems wrong from the way the code is written. Any help on this?

Alan

Re: DTC codes aren't P0xxx.

Posted: Thu Jan 09, 2020 8:18 am
by MartinaLebel
Thanks for ideas. Nice!