Interfacing the 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

You will have to wire Vcc of the module to 3.3v otherwise the readings will be incorrect

Code

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

[codesyntax lang=”cpp”]

#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);
    }
}

[/codesyntax]

Output

Pressing the keys from K0 to K16 outputted the following in the serial monitor (rough values)

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 4×4 Accessory board matrix buttons controlled ADC

Related posts

Chipkit Max32 and ADXL335 accelerometer example

Chipkit Max32 and LSM303 Accelerometer example

Chipkit Max32 and LSM303 Magnetometer 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