I am designing an interface for my car steering wheel to a Android head unit, using a Sparkfun Arduino Pro Micro to handle the USB side of things. The steering wheel buttons use three wires and a resistor ladder for the buttons, as shown in this diagram from the service manual:
Each resistor in the diagram is the same value. My current solution is looks like this:
simulate this circuit – Schematic created using CircuitLab
Which works on my PC, but causes two problems in the car
- Pressing "Power Switch" or "Mode Switch" causes a brown-out on the micro controller and resets it, most likely due to exceeding the USB current.
- The car is a much noisier environment and the "Volume Switch" buttons are not distinguishable reliably in the car, no matter how much smoothing i do in code.
Ideally what I need is to know which line (L or W) is being pressed when the ADC reads a value. This would make the noise far less of an issue and I could then probably apply some sort of current limiting to eliminate the brown-outs without worrying about compressing the ADC range of values too much (and lose the diode).
Is there a simple way I can read the value at the ADC and use a digital pin to figure out which line was pressed (hopefully without too many components)?