Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Odometer value #173

Open
vizziniroberto71 opened this issue Jul 16, 2023 · 7 comments
Open

Odometer value #173

vizziniroberto71 opened this issue Jul 16, 2023 · 7 comments
Assignees
Labels
enhancement New feature or request

Comments

@vizziniroberto71
Copy link

HI,
I'm using your library for a project and it's been very useful, really nice work!
I also wanted to enter the value of the kilometers traveled (odometer), but I can't find the entry in the library. Am I looking wrong or hasn't been implemented? I checked on Wikipedia the formula for the calculation (PID 166) but not being an expert I don't know how to implement it. Is there a way to extract the value using the library, or is this a function you would have to implement from scratch?
Thank you.
Robert.

@patfelst
Copy link
Contributor

you'll have to code it yourself. Just copy one of the other PID functions, and replace the PID with 166. Something like this (I've not tested it):

uint8_t ELM327::odometer()
{
	return (uint8_t)processPID(SERVICE_01, 166, 1, 4, 0.1);

}

Note that it returns 4 bytes, and you need to divide the result by 10 (that's what the 0.1 scale factor is for)

@vizziniroberto71
Copy link
Author

vizziniroberto71 commented Jul 16, 2023

Hi Patrick,
thanks for your suggestion, I modified the library to also read the odometer value, but when compiling it returns the following error:
c:\Users\Administrator\Documents\Arduino\libraries\ELMDuino\src\ELMduino.cpp: In member function 'uint32_t ELM327::supportedPIDs_161_192()':
c:\Users\Administrator\Documents\Arduino\libraries\ELMDuino\src\ELMduino.cpp:2261:42: error: 'SUPPORTED_PIDS_161_192' was not declared in this scope
return (uint32_t)processPID(SERVICE_01, SUPPORTED_PIDS_161_192, 1, 4);
^~~~~~~~~~~~~~~~~~~~~~
c:\Users\Administrator\Documents\Arduino\libraries\ELMDuino\src\ELMduino.cpp:2261:42: note: suggested alternative: 'SUPPORTED_PIDS_61_80'
return (uint32_t)processPID(SERVICE_01, SUPPORTED_PIDS_161_192, 1, 4);
^~~~~~~~~~~~~~~~~~~~~~
SUPPORTED_PIDS_61_80
c:\Users\Administrator\Documents\Arduino\libraries\ELMDuino\src\ELMduino.cpp: In member function 'uint32_t ELM327::odometer()':
c:\Users\Administrator\Documents\Arduino\libraries\ELMDuino\src\ELMduino.cpp:2284:42: error: 'ODOMETER' was not declared in this scope
return (uint32_t)processPID(SERVICE_01, ODOMETER, 1, 4, 1.0 / 10.0);

this error is returned at compile time. The changes made on the two library files are:
`uint32_t supportedPIDs_161_192();

uint32_t odometer();`
these lines have been inserted in the elmduino.h file!

In the elmduino.cpp file i inserted:

uint32_t ELM327::supportedPIDs_161_192()
{
return (uint32_t)processPID(SERVICE_01, SUPPORTED_PIDS_161_192, 1, 4);
}

uint32_t ELM327::odometer()
{
return (uint32_t)processPID(SERVICE_01, ODOMETER, 1, 4, 1.0 / 10.0);
}

I'm sorry if I bother you for this triviality, but I can't understand the error and it is the last step of the project that is still missing.
Thank you.

Roberto.

@patfelst
Copy link
Contributor

I wouldn't worry about the uint32_t supportedPIDs_161_192(), it's not needed, for the moment, lets just assume your vehicle supports reporting of odometer.

Also you've referenced ODOMETER when it hasn't been defined in the .h file. To start with, just hard code everything as per my example, if it works, then maybe it's worth defining ODOMETER constant etc. I assumed you knew you needed to add the function prototype to the class.

In the .h file where all the other functions are defined - it doesn't really matter where - but I suggest here


add uint8_t odometer();

and paste in the original function I provided in the .cpp file.

that should be all you need to do.

@vizziniroberto71
Copy link
Author

vizziniroberto71 commented Jul 20, 2023 via email

@patfelst
Copy link
Contributor

try turning debug on to see what your vehicle is reporting - this will be independent of your Nextion display.

have a look at the multiple PIDs example for how to turn debug on
https://github.com/PowerBroker2/ELMduino/blob/master/examples/multiple_pids/multiple_pids.ino

@vizziniroberto71
Copy link
Author

vizziniroberto71 commented Jul 26, 2023 via email

@jimwhitelaw
Copy link
Collaborator

I have created a new method to get the odometer reading and an example program to run it. It should be working (works with an emulator) but I'm unable to properly test it as I don't have a vehicle that supports the OBDII spec PID ("A6") to test it with. If someone wants to have a go at it, it's on the "odometer" branch of my ELMduino fork. https://github.com/jimwhitelaw/ELMduino.git

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

4 participants