Creative Commons images are CC BY-NC-SA 3.0

3.95

added to your
shopping cart

quantity
In stock 2,308 in stock
3.95 1+ units
3.56 10+ units
3.16 100+ units

Description: A basic 12 button keypad for user input. The buttons are setup in a matrix format. This allows a microcontroller to 'scan' the 7 output pins to see which of the 12 buttons is being pressed.

Check the examples below for correct pin-outs and such.

Documents:

Comments 86 comments

  • Upon further thinking and research, I’ve (and a friend) devised the best plan to use this thing while taking only ONE (yes 1) analog input. You make a resistor ladder of sorts (see picture 1 below) between the pads and sample the last pad with respect to gnd with one analog input. The nature of what pads short out and how they short makes this non-trivial. I ran a simulation with 1,000,000 different combinations of resistors to optimize the different readings on the analog input. The resistor values and expected analog input readings are given on the second image.
    Circuit Schematic
    Excel Sheet
    edit:
    Picture of Resistors (SMD 603s) on the Pads: the red wire is +5V, purple is analog out, black is ground.

    • So what I’m taking from this is that using one analog pin, you can attach a series of buttons in serial, and depending on the resistance they give, determine which button was pressed.

      Am I correct?

    • I think there is a simpler way to get an evenly spaced analog output without much computation to determine resistor values. This method doesn’t use a resistor ladder. I don’t have this keypad, but I assume that one output pin is connected to each key column and one pin is connected to each key row to make three column pins and 4 row pins. I haven’t figured out how to attach a schematic, so here is a text description of the circuit:
      1. Connect R6 to the voltage reference then to the key “1” row pin.
      2. Connect the key “1” row pin to R5 then to the key “4” row pin.
      3. Connect the key “1” row pin to R4 then to the key “7” row pin.
      4. Connect the key “1” row pin to R3 then to the key “*” row pin.
      5. Connect the key “1” column pin to ground.
      6. Connect the key “2” column pin to R1 then to ground.
      7. Connect the key “3” column pin to R2 then to ground.

      The voltage output is taken from the key “1” row pin. This circuit sets up a simple voltage divider from Vref through R6 then to an equivalent resistance, Re, to ground. Resistors R1 through R5 are expressed as multiples of R1 as follows:
      R1=R1
      R2=2R1
      R5=3R1
      R4=6R1
      R3=9R1
      This results in the Re for each key as follows:
      Key, Re
      1, 0
      2, R1
      3, 2R1
      4, 3R1
      5, 4R1
      6, 5R1
      7, 6R1
      8, 7R1
      9, 8R1
      *, 9R1
      0, 10R1
      “#”, 11R1
      no keypress, infinity

      R6 can be set to whatever you want. The voltage output is then:
      Vout = Vref * Re/(R6 + Re)

      This circuit can be easily modified to work with any number of rows and columns. If the leftmost column is column 0 and the topmost row is row 0, then the column resistors are in the ratios of 0, 1, 2, … n and the row resistors are in the ratios of 0, n+1, 2(n+1), 3(n+1), etc.

    • There are a couple of improvements to be made to this resistor ladder technique.

      • The resistor ladders discussed so far are tapped at “Pin 7”, where there is relatively little possible variation in voltage. It should be tapped somewhere in the middle, so that the voltage can swing nearly rail-to-rail with different button pushes.

      • The combinatorics haven’t been done quite right by either example. The 24-choose-7 = ~350,000 combinations assumes every value can be used only once, whereas in fact repeats are allowed. This pushes the number of combinations into the billions, where an exhaustive search is impractical.

      Nevertheless, much better separation can be achieved. Using a random-sampling approach on 500,000 combinations from the set of resistor values [220 470 560 3300 3900 4300 4700 5600 6800 8200] (based on a sample-pack of surface mount resistors I had, limited to values large enough to keep the current reasonably low), the following set of resistors works much better (P==Pin, R==Resistor):

      +Vs–P0–R470–P1–R5600–P2–R8200–P3/TAP–R3300–P4–R5600–P5–R8200–P6–R3900–P7–R220–P8–GND

      Tap it to the A/D at “Pin 3”.

      The minimum voltage difference between button pushes is 3.4% of Vsupply. That’s 35 digital levels of a 10-bit (1024 level) A/D converter. That should be more robust to variations in contact resistance of the buttons.

      Here are a couple other good combinations with similar results:

      [560, 5600, 8200, 3300, 3300, 6800, 3300, 4700], tapped at “Pin 4”. Minimum of 3.2% of Vsupply (33 digital levels of 10-bit A/D).

      [3300, 6800, 8200, 4300, 3300, 4700, 3300, 4700], tapped at “Pin 4”. Minimum of 2.3% of Vsupply (24 digital levels of 10-bit A/D). Note the higher values here - good for lower current.

      [220, 3300, 8200, 4700, 3900, 8200, 4300, 560], tapped at “Pin 4”. Minimum of 2.7% of Vsupply (28 digital levels of 10-bit A/D).

      I’ve been using that last one, and the data returned are pretty reliable. The lowest difference I’ve observed in practice was 18 digital levels, lower than spec because my VSupply is just a GPIO, and it’s still drawing too much current when you push button “5” (shorts pins 1-7; resulting resistance 780 ohm; current ~4.2mA). You might want to multiply them all by 10 to prevent that problem, or use one of the other options above.

      Hope that helps.

      • My optimal combination is as follows

        GND-220-P1-3300-P2-10000-P3/TAP-220-P4-3000-P5-5100-P6-1800-P7-300-Vs

        The minimum difference is ~7.1% which equates to about 73 digital levels at a min.

        • After a hundred trillion plus calculations(348 checks ~ 1.7 trillion * 80 calculations per check) I was able to find even better results. The theoretical maximum minimum spread is ~85 digital levels. With using only 34 resistor values ( I could have used many more values say 40 or 50 but I feel that the result would have been similar and took another day or more to calculate I was able to find 2 results with a minimum spread of ~78 digital levels. The resistor values are:

          1) 390 3900 9100 510 5100 8200 2700 39

          2) 390 3900 9100 560 5100 8200 2700 39

          you can multiply these values by 10 or 100 and get the same result. The 34 resistor values I used were as follows:

          39 47 51 68 82 100 150 180 220 270 300 390 470 510 560 680 820 1000 1200 1500 1800 2200 2700 3000 3300 3900 4700 5100 5600 6800 8200 9100 10000 12000

          • Doing further analysis with a larger number of values has yielded some slightly better results. The best being

            560 8200 18000 910 9100 15000 5100 51

            This result has a minimum spread of 80!

            This test was based on the following 98 resistor values:

            1 2 3 3.9 5.1 6.2 8.2 9.1 10 11 12 13 15 16 18 20 22 24 27 30 33 36 39 43 47 51 56 62 68 75 82 91 100 110 120 130 150 160 180 200 220 240 270 300 330 360 390 430 470 510 560 620 680 750 820 910 1000 1100 1200 1300 1500 1600 1800 2000 2200 2400 2700 3000 3200 3300 3600 3900 4300 4700 5100 5600 6200 6600 7500 8200 9100 10000 11000 12000 13000 15000 16000 18000 20000 22000 24000 27000 30000 33000 36000 39000 43000 47000

            • Sweet work with the cluster computation. Have you built it and found it to work?

              I would only caution against the smaller values due to current, per above (i.e., at some point is that 51 Ohm or the 39 Ohm above it the only resistor in the circuit? If so, then high current!). But if it works it works.

            • Can you share the exact method you’re using for the calculations? It’d be nice to find the best combinations based on a given set of resistors…

              • I am doing it with simple math and a beowulf cluster of computers(you can do it with a pc but it will take a long time). The math is as follows:

                where “a” is the left most resistor and “h” the farthest on the right. Ground or - is on the left and Vcc or + is on the right. So my previous result would read like this

                GND –> 560(a) –> pin1 –> 8200(b) –> pin2 –> 18000© –> pin3(this pin is connected to an analog pin of a micro controller) –> 910(d) –> pin4 –> 9100(e) –> pin5 –> 15000(f) –> pin6 –> 5100(g) –> pin7 –> 51(h) –> Vcc where “–>” is a connection between the two.

                button 1: 1024 * ( a + b ) / ( a + b + d + e + f + g + h ) button 2: 1024 * ( a + c ) / ( a + c + d + e + f + g + h ) button 3: 1024 * ( a + b ) / ( a + b + f + g + h )
                button 4: 1024 * ( a + b + c ) / ( a + b + c + h ) button 5: 1024 * ( a ) / ( a + h ) button 6: 1024 * ( a + b + c ) / ( a + b + c + d + e + h ) button 7: 1024 * ( a + b + c ) / ( a + b + c + g + h ) button 8: 1024 * ( a ) / ( a + g + h ) button 9: 1024 * ( a + b + c ) / ( a + b + c + d + e + g + h ) button 10: 1024 * ( a + b + c ) / ( a + b + c + e + f + g + h ) button 11: 1024 * ( a ) / ( a + e + f + g + h ) button 12: 1024 * ( a + b + c ) / ( a + b + c + d + f + g + h )

                For further study do a google search on “Voltage resistor ladder” or “voltage resistor divider”

                • heh, I have cluster power, hence why I was interested. Essentially then you are just brute force checking all possible combinations? There has to be a faster way of doing this.

                  • I have some python code for calculating the optimal combination based on a given set of resistor values up in a bitbucket repo

                    I’m porting this over to a hadoop job at some point - I’d like to find the best combination for the E12 series, as those are easiest to find.

                    So far, with 46 digital levels, the best E12 series I’ve found is: [1000, 1200, 10000, 1500, 4700, 8200, 1800, 2200]

                    You can see this in circuitlab

      • Your solution makes me think that I may be fundamentally misunderstanding the keypad…

        Doesn’t pressing button 5 create a short between pads 1 and 7? Thus sampling anywhere other than 1 and 7 will give ambiguous readings. If you sample at pad 4, pressing button 5 (short 1 to 7) and button 3 (short 2 to 5) will both give a floating voltage read.

        Similarly, suppose you used the same resistor value for R1 and R2, when you press button 2 (short around R1) and button 1 (short around R2) you will get readings.

        However, I never got my keypad to work because the readings were dancing around too much (I was thinking of using a cap and/or an op amp to get a better signal) - but the behavior wasn’t drastically different than I expected…

        You do have a point about using higher resistor values (I’ll edit my solution), but I was implying kOhms and was using smaller numbers just for readability.

        • Your understanding of the board is correct, you just forgot that with pin 1 shorted to pin 7, the readings from pins between 1 and 7 will all be the same, not ambiguous.

          That is, with V1 == V7, you get no current through the resistor ladder between them, so the implication is that V1==V2==V3==V4==V5==V6==V7.

          So tapping at e.g. Pin 4 and pressing Button 5 (short pin1 and pin7), V1 through V7 all have a voltage reading coming from a simple voltage divider of the first (left of pin1) and last (right of pin7) resistors in the ladder.

          As for the equal values problem on e.g. R1 and R2, you’re right. But that’s the very problem that motivates the combinatorics - finding the combination that optimally spaces the output voltages.

          Give it a shot, the way I’m using it has been working well and reliably, and the noise is not a problem because the readings are so far apart!

    • If I’ll ask you kindly, could you do the same calculation for 4x4 keypad, which have 8 outs? Raw outs are 3 5 6 7 and column are 8 1 2 4, counting from left to right and up to down. Thank you.

      Me, by myself, came to the variant which uses 2 analog inputs (didn’t counted it yet), but your variant is nuch better.

    • Thank you for this great idea! However, what exactly were you trying to optimize? I thought this was a really interesting problem and was wondering if our solutions would match.

      Given your solution, I assume that you took the common resistor values to be your universe of possible resistors: 10,12,15,18,22,27,33,39,47,56,68,82, and all their multiples of 10. That’s 24 different values and we pick 7, which gives us less than 350,000 combinations (Maybe you were making their multiples of 100 too? Doing so did not change my result)..

      I figured that what we wanted was to space out the Vout/Ain Return for each button as much as possible; that is, maximize the minimum distance between any two possible readings.

      The following sequence of resistors did this optimally for me: 39, 82, 120, 150, 180, 220, 680 (in K OHMS)

      It gives a minimum difference between two possible readings of 11.7 instead of 6.5 from your ladder (this is in the Arduino’s 1024 res). I’m pretty happy with the improvement but perhaps you intended to optimize something else?

      • If I’ll ask you kindly, could you do the same calculation for 4x4 keypad, which have 8 outs? Raw outs are 3 5 6 7 and column are 8 1 2 4, counting from left to right and up to down. Thank you.

        Me, by myself, came to the variant which uses 2 analog inputs (didn’t counted it yet), but your variant is nuch better.

        • I found the following resistor ladder for 4x4: (12, 15, 39, 56, 82, 100, 150, 180)

          The minimum difference is only 4.9 however.

  • I’ve made a Python Package that works with this keypad as well as 4x4 ones. It is made for the RaspberryPi for now but could be ported over to work on the beaglebone as well once I get one to mess with. It supports both the RPi’s GPIO aswell as support for the I2C chip family MCP230xx

    http://crumpspot.blogspot.com/p/keypad-matrix-python-package.html https://pypi.python.org/pypi/matrix_keypad

  • Damn wish you guys carried a 4x4 keypad !

  • It’s very odd but there is no 12 button keypad with included status red/green LEDs available. If anyone has seen one, please tell, where? Also, is there a mounting face plate for this 12 key unit? Again, where? Seems a missing product opportunity; 12 keys, 2 leds, face plate. Such a simple idea yet no one makes it.

    Any ideas? Thanks

  • It’s very odd but there is no 12 button keypad with included status red/green LEDs available. If anyone has seen one, please tell, where? Also, is there a mounting face plate for this 12 key unit? Again, where? Seems a missing product opportunity; 12 keys, 2 leds, face plate. Such a simple idea yet no one makes it.

    Any ideas? Thanks

  • It’s very odd but there is no 12 button keypad with included status red/green LEDs available. If anyone has seen one, please tell, where? Also, is there a mounting face plate for this 12 key unit? Again, where? Seems a missing product opportunity; 12 keys, 2 leds, face plate. Such a simple idea yet no one makes it.

    Any ideas? Thanks

  • It’s very odd but there is no 12 button keypad with included status red/green LEDs available. If anyone has seen one, please tell, where? Also, is there a mounting face plate for this 12 key unit? Again, where? Seems a missing product opportunity; 12 keys, 2 leds, face plate. Such a simple idea yet no one makes it.

    Any ideas? Thanks

  • It’s very odd but there is no 12 button keypad with included status red/green LEDs available. If anyone has seen one, please tell, where? Also, is there a mounting face plate for this 12 key unit? Again, where? Seems a missing product opportunity; 12 keys, 2 leds, face plate. Such a simple idea yet no one makes it.

    Any ideas? Thanks

  • It’s very odd but there is no 12 button keypad with included status red/green LEDs available. If anyone has seen one, please tell, where? Also, is there a mounting face plate for this 12 key unit? Again, where? Seems a missing product opportunity; 12 keys, 2 leds, face plate. Such a simple idea yet no one makes it.

    Any ideas? Thanks

  • For anyone needing it you can follow the Keypad tutorial and get the library here: http://www.arduino.cc/playground/Code/Keypad
    And if you want to use the example sketch they provide on the page you would connect the keypad as follows
    Looking at the top of the keypad (key side) with the pins at the bottom from left to right you have pins 1-9 with pins 1 and 9 being null (not connected)
    Ard - Keypad
    2 - 5
    3 - 7
    4 - 8
    5 - 3
    6 - 6
    7 - 2
    8 - 4

  • Looking at the top of the board, the pinout from left to right is:
    No connection
    Column 1
    Row 0
    Column 0
    Row 3
    Column 2
    Row 2
    Row 1
    No connection

  • A problem with the R-ladder is that with no button pressed, the “idle voltage” is too near one of the actual “key voltages”. So, here’s another approach.

    Given the narrow spread between voltages, I’ve opted for using 1% resistors for this. They are available at Mouser.

    Hookup: Connect a 27.4K resistor from pad 3 to GND Connect pad 3 to pad 1 with a 60.4K resistor Connect pad 1 to pad 5 with a 210K resistor Connect a 309K resistor from pad 2 to V+ Connect a 154K resistor from pad 7 to V+ Connect a 66.5K resistor from pad 6 to V+ Connect a 10.0K resistor from pad 4 to V+ Connect pad 3 to an analog input on the Arduino (or any 1024-bit ADC)

    With this, the expected digital readings for the various keys are:

    1: 82 ~ 85 4: 152 ~ 157 2: 223 ~ 230 7: 295 ~ 303 5: 367 ~ 377 3: 497 ~ 509 8: 576 ~ 590 6: 667 ~ 683 *: 742 ~ 759 9: 828 ~ 846 0: 909 ~ 929

    : 980 ~ 1002

    with a reading of zero if no key is pressed. The minimum gap between any two key reading ranges is 51.

  • Just as a help, I don’t know if it is fully functional with this specific keypad, but their is a matrix keypad library and tutorial available in the Arduino playgroud

  • Anyone know when this will come back in stock?

  • For those having problems, and not wanting to have many cable crossings: Using the arduino keypad tutorial (with the keypad library), you can do a straight connection from pin 2 on keypad, pin 12 on arduino, then the last pin (pin 7) on keypad would go to arduino pin 6. (2 ends are NC)..

    In this case the proper setup lines are: byte rowPins[ROWS] = { 11, 6, 7, 9 }; byte colPins[COLS] = { 10, 12, 8 };

    If you want to start on pin 2, you would shift by 4 pins (pin 6->2, 7->3 …. 12 -> 8) .. Hope this helps, spent the last 30 minutes mapping this out :)

  • hello. I ordered a few of theese keypads via Robonor, Norway.

    3 OF 4 doesnt work.

    Key functions have been measured using a multimeter.

    Is this a known problem?

    Regards Jan Eikeland

    • I found these to work great with an arduino (AVR Atmega328) … however I cant get it to work reliably with an uno32(pic32 processor) … you may just be using a chip thats too fast or something … it wouldnt matter howlong I debounced stuff for I could not get it to work reliably with the pic32

    • Note that when pressed, these keys may still show over 100 Ohms resistance (they are not switches so much as conductive rubber pads). This works perfectly fine for logic circuits, but they may not “beep” for a multimeter on the continuity setting. If you’re using continuity, try measuring the resistance instead. Hope this helps!

      • Correct, they do not beep, but they show different resistance. I thought for a second that I got a dead keypad, but the other did the same thing. Works fine with an arduino :)

    • Hi Jan! Sorry to hear you are seeing problems with the keypads. Please contact us at techsupport@sparkfun.com so we can troubleshoot and help you out! It is not common for these to be bad. Please email us! :)

  • Anyone know when these are expected back in stock or anyone else who carries them?

  • Got one of these today.

    Soldering is a bit tricky since the pads are so close together but with a little solder wick, I had it going on the first try. The sample code I used failed to set pin 13 to an output so I thought I was having problems when the led would not change state. Once I fixed that it was perfect. This thing would not survive an industrial environment for long but I was pleasantly surprised at both how quickly I was up and running and the fact that it is reasonably well constructed for $4.

    Happy today with this and the other stuff I got!

  • How about a hexadecimal version, please?

  • I wish you had a cheap 4x4 pad and was a little bigger then this…. like number pad on a computer

  • Why not carrying membrane keypads? Cheap and sticks to a hard surface, such as an enclosure. They are way easier to understand regarding the connection.

  • Keypad I’ve received does not work at all… Metered it out: 4 buttons in total work :-(. Shipping it back oversees probably costs more than buying a more expensive one somewhere more closeby :-(

    • Hello. I have the same problem, I bought one of this and when I mounted in in project I found that bottons 4-5-6 not working. Sparkfun sent another one, I just finish it to mount the new keypad in my project and found the same, ramdoly botton 1 and 7 not work. Possible a bad lot.

      • I think part of the problem is the very cheap soldering pads on this. I lifted 2 pins while soldering and didn’t notice. Took me awhile to figure out why a row of numbers was not working. From the comments it appears some others are having the same issues with the pads.

  • When will this be back in stock?
    I need it for a project

  • I haven’t seen anyone else talk about interfacing this with a PLD, so I thought I’d suggest it. You can get a PLD like the “ATF16V8BQL-15PU” for $1.60. Use the 7 outs of the keypad as ins for the PLD, make a truth table, and have the PLD output a 4 bit (HEX) number for each (Carnaugh maps may help, but I’m just gonna use maxterms). This would be much simpler to interface with an arduino than using another MCU in the middle. Here’s code that I wrote that I haven’t tested yet, but it should work. You do need a IC programmer.
    Ok, it’s late, and I realized that I’m going to have to write it out and look check it and what not to make sure it works, I’ll reply to this later. I really do think this is the best method to decode this keypad though. It’s a static decode, thus logic circuits should be used, not MCUs. Problems will arise if two buttons are pressed, but whatever.

    • So, looks like it’ll be easier inverting the output, using negative logic (note the slash in front of the outs). These are the outputs, 0=0000, 1=0001… 9=1001, *=1010, #=1011. And otherwise (no buttons being pressed) = 1111. I’ll be checking this in awhile, but I checked the hand work several times and believe this to be right.
      edit: due to the formatting, I can’t write it correctly. Replace the ‘ “ ’ with shift+8, the multiply symbol.
      CHIP ID ATF16V8BQL;
      Pin 1 Clk ; Clock pin
      Pin 2 p1 ; pad 1
      Pin 3 p2 ; pad 2
      Pin 4 p3 ; pad 3
      Pin 5 p4 ; pad 4
      Pin 6 p5 ; pad 5
      Pin 7 p6 ; pad 6
      Pin 8 p7 ; pad 7
      Pin 12 /out0 ; output 0
      Pin 13 /out1 ; output 1
      Pin 14 /out2 ; output 2
      Pin 15 /out3 ; output 3
      EQUATIONS
      out0 = p1"p4 + p1"p2 + p3"p7 + p5"p7 + p1"p6 + p3"p4
      out1 = p1"p4 + p2"p3 + p3"p7 + p1"p7 + p1"p6 + p5"p6
      out2 = p1"p4 + p2"p3 + p1"p2 + p2"p5 + p1"p6 + p5"p6 + p3"p4 + p4"p5
      out3 = p1"p4 + p2"p3 + p1"p2 + p2"p5 + p3"p7 + p1"p7 + p5"p7 + p3"p6

  • If you press two or more buttons on this thing, will you get ghost keys? Or is the matrix designed otherwise?

  • Had this working in a few hours, but ran into an issue where holding two more more buttons would cause unusual behavior. For some combinations, it would register the wrong button, other combinations it would do nothing. Undefined behavior is never desirable, so debugged it for a few hours and found the solution.
    If you set all the columns to be “INPUTS”, and use pull-down resistors, then set all the rows to be “OUTPUTS”, with switching diodes, allowing those pins to transmit high, but not ground a low signal, then it is possible to identify the state of each individual button, even if more then one button is pushed at a time. Then the algorithm is basically to set all the rows LOW, then one by one, set each one HIGH and then back down to LOW. While its HIGH, check each of the column pins to see which button in that column is registering a HIGH (that button is pushed).
    A few interesting notes:
    * Depending on the pressure you put on the button, the resistance between the two connected pins will change. In other words, the less you push the button, the higher the resistance. I was not able to get a solid resistance free connection, even with tons of pressure (but it is very low resistance)
    * When you push a button, it will fluctuate between connected and not connected for a few nanoseconds. As such, you will need to time the button and make sure its been depressed for somewhere around 30ms before you register it as a push. Otherwise you end up seeing the button get pushed a few times for every individual push.

  • In case anyone is looking for a good tutorial, I wrote one !
    A lot is covered along with how to use it with the Password library.
    http://bildr.org/2011/05/arduino-keypad/

    • Hi asselinpaul,
      I have become very frustrated while trying to build the project “What’s the password? Arduino + Keypad”. I did everything exactly as specified but when I downloaded the provided code, and then tried to compile it, this is the error that I received:
      secret_keypad.cpp.o: In function __static_initialization_and_destruction_0': secret_keypad.cpp:20: undefined reference toPassword::Password(char)‘
      secret_keypad.cpp:37: undefined reference to Keypad::Keypad(char*, unsigned char*, unsigned char*, unsigned char, unsigned char)' secret_keypad.cpp.o: In functioncheckPassword()’:
      secret_keypad.cpp:64: undefined reference to Password::evaluate()' secret_keypad.cpp.o: In functionkeypadEvent(char)‘:
      secret_keypad.cpp:51: undefined reference to Keypad::getState()' secret_keypad.cpp:57: undefined reference toPassword::reset()'
      secret_keypad.cpp:58: undefined reference to Password::append(char)' secret_keypad.cpp.o: In functionloop’:
      secret_keypad.cpp:46: undefined reference to Keypad::getKey()' secret_keypad.cpp.o: In functionsetup':
      secret_keypad.cpp:42: undefined reference to `Keypad::addEventListener(void (
      )(char))‘
      I have no clue how to fix this, maybe you can help.
      Thanks

  • Dear all,
    the first time i plugged the keypad to my circuit it worked. After testing it, 10 minutes later, the col3 didnt want to work. Later on i opened it and check out all the connections inside. I found out that this is a very basic and cheap model, but worht for 4$. After all i noticed that it is very sensitive on solder connections.
    what i mean is that if you use more that 15W to solder then it might be possible to burn the pins.
    I use one with 12W. Then i solder some pins in 1 to 7.
    I have noticed and something else. The connections from 1 to 7 are very close. Even if you carefuly solder in there the pins, the keypad is very sensitive and can be sorted some pins.
    Not real solder but the solderine out of the metal. that can cause a sort circuit. I havent found that before but yesterday i was playing and testing the keypad.
    Now after a day my circuit works and the keypad is stable.

  • A very good discussion of this keyboard along with a well-documented sketch showing its use is provided on pages 149-152 of “Arduino Cookbook” by Michael Margolis.

  • This keypad works. However it took some time getting it to work. There’s a lot of wrong information on the internet. My biggest mistake was involving pin 13, which has an LED on it on the Duemilinove and thus leaked to ground which resulted in oscilating readings.
    I wired it up as follows:
    keypad -> arduino
    1 6
    2 7
    3 8
    4 9
    5 10
    6 11
    8 5 (bear in mind you could connect it to 12 but my RF unit was set to that)
    The code uses the KeyPad library:

    include

    const byte ROWS = 4; //four rows
    const byte COLS = 3; //four columns
    //define the cymbols on the buttons of the keypads
    char hexaKeys[ROWS][COLS] = {
    {‘1’,‘2’,‘3’},
    {‘4’,‘5’,‘6’},
    {‘7’,‘8’,‘9’},
    {‘*’,‘0’,‘#’}
    };
    byte rowPins[ROWS] = {7,5,11,9}; //This order is important if you use pin 12 instead of 5 change the 5 into 12
    byte colPins[COLS] = {8,6,10}; //The order is important
    //initialize an instance of class NewKeypad
    Keypad cusomKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
    void setup(){
    Serial.begin(9600);
    }
    void loop(){
    char customKey = cusomKeypad.getKey();
    if (customKey != NO_KEY){
    Serial.println(customKey);
    }
    }

  • I have created a datasheet that is LIKELY correct. I located a keypad that this is either a clone of or close enough that it is kinda silly. It appears to be an Accord Co. AK-304-N series keypad.
    Big informative datasheet:
    http://www.tenrod.com.au/pdf/accord/keypads.pdf
    The datasheet I made (because the only images online were AWFUL) can be found here: COM-08653 Datasheet
    The SVG I created can be found here:
    COM-08653 SVG
    I hope this is helpful to someone and PLEASE email me (email in the PDF) if I’ve made any mistakes! Oh, and if Sparkfun doesn’t like this, I’ll take it down.

  • I use this on a door with a small solenoid lock. It’s a nice keypad.

  • Why does this product not have a datasheet? I’m trying to laser cut an enclosure but it has no info on the exact dimensions. At least give the company name so i can find a datasheet on their website.

  • Twizted:<br />
    <br />

    For anyone needing it you can follow the Keypad tutorial and get the library here: http://www.arduino.cc/playground/Code/Keypad
    <br />
    <br />
    Thanks, it kind of annoying to be referred to the instructables web site where you can’t get anything with signing up.

  • It is not clear for me how it can be connected to a computer? Is it a regular laptop numeric keypad?

    • It is not meant for connecting to a computer. Think of it as a lot of individual buttons. When you press ‘3’, you need something on the other end to read the pins to see that it was ‘3’ that was pressed. You will need some sort of microcontroller to read which pins are connected to determine which button gets pressed. For instance, if 2 and 3 are connected, you should be reading a ‘1’.

  • I just got this keypad and wired it up to an Arduino Duemilanove. I followed the instructable linked above (http://bit.ly/dkpYCY) and am having some weird problems.
    I’m using the sample code provided in the instructable that outputs the characters of any button pressed to serial. It often prints two characters for a button that I only press once. For example, if I press each button once it should print out 1234567890# but it might print 1234456778990#. It doesn’t seem to be a specific button, as I can sometimes push each button and get the correct output, but usually there are some errors. I can get duplicate characters with any button, too. The duplicate character, when it shows up, seems to come from releasing the button.
    I’ve tried wiring it up using 1k resistors between pins 4, 6, 7, and 8 on the keypad as directed in the instructable and without and resistors, and I get the same behavior. Do I need resistors? I’m not exactly an electronics expert, but I’m slowly learning.
    Does anyone have any ideas what might be wrong?
    Thanks!

    • Make sure the button is stabilized.
      This is what I use: (keypad1 to PA1, keypad2 to PA3 …)
      don’t forget that Pin0 and Pin7 on keypad do not lead anywhere.
      void initKeypad()
      {
      DDRA = 0b0101010; // keypad columns set as output
      PORTA =0b1010101;
      }
      uint8_t getKey()
      {
      uint8_t n=0;
      PORTA = 0b11011110;
      n=PINA >> 1;
      if (n!=111) return n;
      PORTA = 0b11110110;
      n=PINA >>1;
      if (n!=123) return n;
      PORTA = 0b11111100;
      n=PINA >> 1;
      if (n!=126) return n;
      return 0;
      }

      • sorry, Pin0 and Pin9

      • uint8_t readKey()
        {
        uint8_t k,tmp,i;
        i=0;
        k=0;
        while (i<20)
        {
        k=getKey();
        if (k==lastKeypadChar) return 0;
        if (k==tmp)
        {
        i++;
        } else {
        i=0;
        }
        tmp = k;
        }
        lastKeypadChar = k;
        if (k==134) return 0;
        if (k==121) return ‘1’;
        if (k==124) return ‘2’;
        if (k==109) return ‘3’;
        if (k==59) return ‘4’;
        if (k==62) return ‘5’;
        if (k==47) return ‘6’;
        if (k==91) return ‘7’;
        if (k==94) return ‘8’;
        if (k==79) return ‘9’;
        if (k==115) return ‘*’;
        if (k==118) return ‘0’;
        if (k==103) return ‘#’;
        return 0;
        }

  • http://www.corby.com/product/pricelst.php (Scroll down to the 7130 products)
    I haven’t bought this keypad assembly, so I can’t say for sure, but it looks like it uses the same keypad as the one offered here. It’s installed in a single-gang bezel with red, yellow, and green LED’s, but doesn’t include any sort of electronic brain - you have to provide your own. Perfect for a DIY alarm system! They also have versions with two LED’s, eight LED’s, and a few others.

  • A bezel or case for this would be nice. It’d be even nicer if the case included a hole for a lcd :D

  • I can confirm that the cover plate used for this item is designed to fit this keypad…
    http://www.homedepot.com/webapp/wcs/stores/servlet/ProductDisplay?productId=100396591
    Not only does it fit, it snaps into place and stays there. The question is, is it possible to just get the cover plate? I’d love to have a few more keypads for my Arduino-based alarm system :-}}

    • I found out that Home Depot links require a store ID, a language ID and a catalog ID. If you don’t have it in cache or cookie it will error:
      You should be able to get to it here:
      http://www.homedepot.com/webapp/wcs/stores/servlet/ProductDisplay?storeId=10051&productId=100396591&langId=-1&catalogId=10053&

    • That link doesn’t go anywhere for me, do you know the name of the plate? or a working link?

      • I had the same problem, but if you go to www.homedepot.com and in the search bar type the product id number he has listed, “100396591” the product comes right up.

      • The link still works for me.

  • When will this be in stock?

  • ive had no problems so far working with this keypad.
    ive hooked it to a picaxe-14M which decodes the keypad and then sends the pressed key to my arduino through a Xbee link. i havent had a single time that a button did not respond so im very happy with this little cheap keypad.

  • I got one of these from www.allelectronics.com, but I had to pay $4.50 more there, although the design was admittedly better quality than this one.

  • Hello all,
    I’ve just bought one keyPad for connect this to Arduino. Well, after having many problems, I have tested all the combinations with the pins, and i think that my KeyPad is not working properly, the problem is that my rows 1 and 2 doesn’t respond to no keys pressed.
    Have anyone had this type of problem.
    My tests with a continuity tester has been the folowing
    KeyPad
    col 0 3
    col 1 1
    col 2 5
    row 0 2
    row 1 7
    row 2 6
    row 3 4
    I undestand that when a press the ‘4 key, I’ll have a closed circuit between 3 and 7 pins of keypad, doesn’t it.
    Can Help me anyone.
    Thanks.

  • Has anybody found a ready-made case for this (or similar keypad)? It’s pretty labor-intensive making the case from scratch.


Related Products