CAN Bus Programming

18th June 2018 – UPDATE

mmm… progress is slow – well, stopped really! It isn’t easy getting the raw data from an ELM327 bluetooth dongle. If you know how to do it I’d love to know!


Today’s modern cars are completely controlled by onboard computers. They are complex in design and difficult to maintain if you are not trained or don’t have the right hardware and software to interface with the car’s systems. But there is a way to see what is going on under the computer “hood”… it is called the CAN bus.

I won’t go into the details here… there are plenty of places on the web to find out what the CAN bus is… but in short, it is a network within the car that allows different car systems to interact. In fact, there are often several of these networks in a car.

Fortunately for us, there is a diagnostic port on most modern cars called the ODB2 port. Through this port it is possible to connect up diagostic computers that can read error codes, reset them, and perform other diagnostic functions. In many cases though, this port also provides a way to send messages out onto the network to operate systems in the car.

Why is all this interesting?

I have a Kia Sportage KX-5 car. It is pretty much the top of the range in this model and so it has some pretty neat features. One of those features is the Speed Limit Information Function (SLIF). This uses a camera, mounted descretely behind the rear view mirror, to detect speed limit signs. It then puts up a visual display of the sign on the driver information panel allowing the driver to constantly be aware of the current speed limit. Another feature is the speed limiter. This allows the driver to set a maximum speed and the car will not accelerate above that speed. Unfortunately, these two systems are not linked. Currently, each time the road speed limit changes I get an indication in the car but then I have to manually change the speed limit setting to match. What I want to achieve is to read the SLIF data on the CAN bus and then use that data to send out a command on the CAN bus to set the limiter to that speed. No more manually setting the limiter speed!

At this stage I know little about CAN bus programming or how this might be achieved. In fact, right now, I don’t even know if it is actually possible to do this at all through the ODB2 port.

I have a lot of research to do first before I can progress this project.

If anyone has any input that might contribute to this project please get in touch  🙂

One thought on “CAN Bus Programming”

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.