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.