I am trying to interface a door intercom to our current telephone system.
I have dismantled the telephone and worked out the pin outs for the keypad matrix but I am stumped as to how to programmaticly wire it up to the arduino. I essentially want the arduino to become the matrix keypad so I can program it to dial numbers.
I have 7 pins in total (3 horizontal and 4 vertical across the rows). They are 3.3v with very little milliamps.
I know vaguely how it should work but not sure on how to set up the pullup resistors and joint ground.
So you basically want to simulate the keypad from the Arduino?
The first thing that springs to mind is to do just that. Recreate the matrix using transistors or mosfets for the switches and then have 12 arduino pins controlling them, instead of your fingers.
Just neednto make sure any Arduino 'press' is long enough in duration to replicate a human press and give the scanning routine time to see it as it scans the rows and colums on the matrix.
You'd have to set a test up to see if it would work, but I think it may do.
If you can't afford 12 pins then you could control the transistor bases via a couple of 595 shift registers. You could just have a value that corresponds to the shift register output for a particular key 'press' and then ShiftOut the high and low byte to enact.
I have it set up and its recognising button presses.. But I am getting switch bounce. it always recognises the the button press twice, I have had the arduino on a scope and its a bit messy but not sure if thats what triggering it.
I have tried 10ms, 50ms even 500ms. It's not time based as it doesn't register multiple pressed while the line is high, only when it first goes high and again when set low.
The top grid is the signal from the arduino and the bottom from the output for the transistor.
Can you wire up the original matrix keypad and see what the output is like from that?
What you are describing would logically suggest that a keypress down/up should be interpreted the same.
There must be some debouncing in there somewhere for the manual keypad. You wouldn't need that with transistor switching as it is a clean on/off, unlike a mechanical switch.
If you can scope the button press then maybe it might actually be a case of simulating bounce with the transistor. Since we don't have acccess to the code reading the "keypad" it's going to be a measure of guesswork.