Using an old phone keypad?

Hey guys,

I’m working on a project where I’m reusing an old DTMF phone with a 3x4 keypad to use in combination with an Arduino Nano.

I’ve found the Keypad.H library and was using it to make sense of the keypad’s input, but when I connected all the wires to the phone’s keypad my output wasn’t as expected - and I even ended up frying one of my Nanos…!

To this point I’m still completely baffled to what caused this unfortunate situation and I’ve been searching and searching for a possible answer. It seems I could’ve had to add additional resistors to the rows or columns of the matrix (something I hadn’t done at first) to limit the current, but as there can be found several YouTube videos of people succesfully hooking up matrix keypads directly to an Arduino, I didn’t think it would be necessary.

A different possible explanation could be found in the keypad itself - although I isolated the pins on the phone for the rows and columns from the rest of the original phone circuit (so if I press a key, the only two things making a connection should be the corresponding row and column pins), I still measure a minimal resistance of 170 ohms and a maximal resistance of 605 ohms between a row and a column if the corresponding key is pressed (so when it should short or have a resistance of nearly zero).
Could it be that the original circuit used different resistances by using different alloys in the keypad to let an analog input determine which key was pressed, or maybe even to directly produce the corresponding DTMF frequency?
And could it be that the additional unsuspected resistance in the circuit messed up my readings of the buttons pressed?
Or did I just make the mistake of not adding the necessary protection to my Arduino’s inputs?

I hope you can help me solve this problem as I really wouldn’t like to mistreat another Arduino :stuck_out_tongue: I tried to be as precise as possible in describing what happens, if there’s any more necessary info missing please let me know.

Why do you make me dredge up really old stuff? Check out the paragraph on telephone keypads: Dual-tone multi-frequency signaling - Wikipedia.

Each button has it's own single transistor oscillator that oscillates on a low frequency and a high frequency at the same time. As I recall, engineers said it could not be done, but ATT proved them wrong.

Your keypad is not close to what you get on Ebay!
Paul

Dang. Do you mean to say that when I push a button, the metal itself vibrates in a certain frequency, thus creating the right tone? Any way you'd reckon I could bypass these oscillators?

The Wikipedia page you sent said:

Initial pushbutton designs employed levers, so that each button activated two contacts.

I think this is how my keypad works, the buttons themselves work as a wedge that pushes two pieces of metal strips to two contacts - one contact is connected to all the buttons in a row and the other to all the buttons in a column, this made me think that it would be as simple as using the Keypad.H library.

Ykwinno:
Dang. Do you mean to say that when I push a button, the metal itself vibrates in a certain frequency, thus creating the right tone?

NO

The Wikipedia page you sent said: I think this is how my keypad works, the buttons themselves work as a wedge that pushes two pieces of metal strips to two contacts - one contact is connected to all the buttons in a row and the other to all the buttons in a column, this made me think that it would be as simple as using the Keypad.H library.

Your keypad is a simple one with rows and columns. To use it you need to remove all connections to the telephone's own circuit to use it. What Paul is talking about is the very first DTMF-phones that used rather archaic circuits to make the tones - that's not what is in your phone.

I cannot come with any explanation on what "fried" your Arduino, whatever that means, but as long as the phone line is disconnected from the Arduino i see no problems. There is no special metals that are vibrating. It's just 12 buttons arranged in a row/column fashion.

// Per.