AD keypad module

I purchased this module as part of a microcontroller kit, its an interesting little module as it has 16 buttons but with only 1 I/O line is required, an analog input. You connect this to your Arduino and read in the value.

The concept is straightforward  you use a resistor network as voltage dividers, and then let each button feed a different voltage to the analog pin. So by detecting the voltage you can tell which button has been pressed. You can only detect one button at a time

AD Keypad

Here is the schematic of the module, hopefully you can see what I described earlier

AD Keypad Schematic

 

Code

I put in a slight delay to try and compensate for bounce on the key press which would result in multiple values returned

#define KEYPAD_PIN 0
 
// milliseconds to wait, to make sure key is pressed
#define TIME_TO_WAIT 200
 
void setup()
{
    Serial.begin(9600);
}
 
void loop() {
  // put your main code here, to run repeatedly:
    int reading1 = analogRead(KEYPAD_PIN);
    // waiting
    delay(TIME_TO_WAIT);
    // reading 2nd time - to make sure key is pressed
    int reading2 = analogRead(KEYPAD_PIN);
    if(reading2 <= 1000)
    {
      Serial.println(reading2);
    }
}

 

Output

Pressing the keys from K0 to K16 outputted the following in the serial monitor

0
61
125
190
253
316
380
447
510
576
641
702
765
831
896
960

So using a switch case you can use this module in your own examples, best practice would be to have a high and low value and check between the range

 

Links
AD Keypad 16 Push Buttons 4×4 Accessory Board Matrix Buttons

Related posts

Arduino Uno and HMC5983 magnetometer example

Arduino and PCF8563 RTC example

Arduino and Rotary encoder example

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Read More