Home Code Interfacing the AD keypad module

Interfacing the AD keypad module

by shedboy71

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

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

Share

You may also like

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