Heater controller - Reading button state

Hello all,

A while back I bought a heater control panel from an MG ZS ICE. Although the button icons look different, the electronics seem to match. My idea was to develop a module that goes between the panel and the car in order to reprogram what each button does. In particular I wanted to build my own climate control by using an Arduino and temperature and moisture sensors to basically stop the car from heating or cooling once a certain temperature is reached and start and stop the aircon when the air gets too moist.

So far, I have been able to power on the module and visually read button pushes using an Arduino Nano. By connecting pin 10 to 5v and pin 2 to ground, all button back lights turn on. Then, connecting pin 8 to an analog input on the Arduino shows different voltage changes when pressing different buttons:

Red: Upper air flow button
Blue: Combined upper and lower air flow button
Pink: Lower air flow button

All of these voltage changes seem to be unique, however, since the regular voltage goes up and down at a for me unknown rate sometimes the timing is off and some bars appear slightly higher than at other times. All the other buttons show a unique raise or drop of voltage too (including turning the two dials). Also, I have not found out how to light up the individual button lights.

Other observations (HIGH pin outputs a constant 5v, LOW pins output a constant voltage between 0.1~0.5):


My very simple Arduino sketch:

void setup() {
  pinMode(A0, INPUT);

void loop() {
  int sensorValue = analogRead(analogInPin);
  Serial.print("sensor = ");

Having played with this some time now, I came to the realization that I won’t be able to get my project into a working state anytime soon. Even if I can reliably detect which button is pushed, I wouldn’t know how get the timing right on the HVAC ECU side in order to forward the right message.

If anyone is interested into bringing this project further or if anyone thinks having access to a heater controller is beneficial in trying to solve the remote-heat challenge with OMVS, let me know and I happily ship the module over for anyone to tinker with.

1 Like

I love this work, well done. Does that mean there is no CAN data on the control board? If so that is interesting as I wonder if the ATC (HVAC) ECU differs between the MG5 and the ZS.

Since I have not wired in to the car, I can not be certain there is no CAN data coming from the module. It might only start responding after the HVAC ECU triggers it with a special message? It might be that pin 8 just outputs raw information for use during the factory’s QA process on the HVAC control module.

the different voltages might be because they’re using a membrane key switch layer with graphite loaded pads, so the car’s interface is simply looking for sufficient voltage swing.

Could you open the module to see what’s inside? Where did you order it? And how much was it?

Nothing much to see really. I got it off of eBay from some damaged car dealer. However, if you are interested to have a closer look and maybe know how to get some more data out of it I am happy to share.

Well, it would be interesting to know if any of those 3 smaller IC’s around the header are perhaps CAN-transceivers. Or perhaps that the larger CPU has already a CAN interface. If none of them are having a CAN interface a “replacement” PCB could be made with proper climate control perhaps :smile:

Can we get a closer image of the 3 ICs? has SAIC scrubbed the identification label?

Here’s a better look at the ICs. The two small ones carry the same code.



Hey Sjoerd, but what about the small ics (8pin) around the header?

I wager a SO8 CAN Transceiver is hiding there :grinning:

I think Mike is right and those are SO8 CAN Transceivers. If you need the exact serial number, I will need to reopen the module to check it out.