0% found this document useful (0 votes)
297 views5 pages

LCD KeyPad Shield - Introduction

The Arduino LCD Keypad Shield allows users to interact with a menu on a 1602 LCD display using 5 buttons. It uses a single analog pin to read the voltage values from the button press and determine which button was pressed. The sample code shows initializing the LCD display, reading the button press values, and printing the button pressed to the LCD.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
297 views5 pages

LCD KeyPad Shield - Introduction

The Arduino LCD Keypad Shield allows users to interact with a menu on a 1602 LCD display using 5 buttons. It uses a single analog pin to read the voltage values from the button press and determine which button was pressed. The sample code shows initializing the LCD display, reading the button press values, and printing the button pressed to the LCD.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 5

Arduino LCD KeyPad Shield

Introduction

The LCD Keypad shield is developed for Arduino compatible boards, to provide a user-friendly interface
that allows users to go through the menu, make selections etc. It consists of a 1602 white character blue
backlight LCD. The keypad consists of 5 keys — select, up, right, down and left. To save the digital IO
pins, the keypad interface uses only one ADC channel. The key value is read through a 5 stage voltage
divider.

Diagram
Pin Allocation

Pin Function
Analog 0 Button (select, up, right, down and left)
Digital 4 DB4
Digital 5 DB5
Digital 6 DB6
Digital 7 DB7
Digital 8 RS (Data or Signal Display Selection)
Digital 9 Enable
Digital 10 Backlit Control
Sample Code

Example use of LCD4Bit_mod library

//
1 #include <LCD4Bit_mod.h>
2 //create object to control an LCD.
3
4
//number of lines in display=1
5 LCD4Bit_mod lcd = LCD4Bit_mod(2);
6 //Key message
7 char msgs[5][15] = {"Right Key OK ",
8 "Up Key OK ",
9 "Down Key OK ",
10
"Left Key OK ",
11
12 "Select Key OK" };
13 int adc_key_val[5] ={30, 150, 360, 535, 760 };
14 int NUM_KEYS = 5;
15 int adc_key_in;
16 int key=-1;
17 int oldkey=-1;
18
19 void setup() {
20 pinMode(13, OUTPUT); //we'll use the debug LED to output a heartbeat
21
22 lcd.init();
23 //optionally, now set up our application-specific display settings, overriding whatev
24 lcd did in lcd.init()
25 //lcd.commandWrite(0x0F);//cursor on, display on, blink on. (nasty!)
26
27
lcd.clear();
28 lcd.printIn("KEYPAD testing... pressing");
29 }
30 void loop()
31 {
32 adc_key_in = analogRead(0); // read the value from the sensor
33
digitalWrite(13, HIGH);
34
35 key = get_key(adc_key_in); // convert into key press
36 if (key != oldkey) // if keypress is detected
37 {
38 delay(50); // wait for debounce time
39 adc_key_in = analogRead(0); // read the value from the sensor
40
key = get_key(adc_key_in); // convert into key press
41
42 if (key != oldkey)
43 {
44 oldkey = key;
45 if (key >=0){
46 lcd.cursorTo(2, 0); //line=2, x=0
47 lcd.printIn(msgs[key]);
48
49
}
50 }
51 }
52 digitalWrite(13, LOW);
53 }
54 // Convert ADC value to key number
55
56
int get_key(unsigned int input)
57 { int k;
58 for (k = 0; k < NUM_KEYS; k++)
{
if (input < adc_key_val[k])
{ return k; }
}
if (k >= NUM_KEYS)
k = -1; // No valid key pressed
return k;
}
Example use of LiquidCrystal library

1 //Sample using LiquidCrystal library


2
#include <LiquidCrystal.h>
3
4
5 /*******************************************************
6
7 This program will test the LCD panel and the buttons
8 Mark Bramwell, July 2010
9
10 ********************************************************/
11
12 // select the pins used on the LCD panel
13
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
14
15
16 // define some values used by the panel and buttons
17 int lcd_key = 0;
18 int adc_key_in = 0;
19 #define btnRIGHT 0
20 #define btnUP 1
21 #define btnDOWN 2
22
23
#define btnLEFT 3
24 #define btnSELECT 4
25 #define btnNONE 5
26
27 // read the buttons
28 int read_LCD_buttons()
29 {
30
31
adc_key_in = analogRead(0); // read the value from the sensor
32 // my buttons when read are centered at these valies: 0, 144, 329, 504, 741
33 // we add approx 50 to those values and check to see if we are close
34 if (adc_key_in > 1000) return btnNONE; // We make this the 1st option for speed reasons
35 will be the most likely result
36 if (adc_key_in < 50) return btnRIGHT;
37
if (adc_key_in < 195) return btnUP;
38
39 if (adc_key_in < 380) return btnDOWN;
40 if (adc_key_in < 555) return btnLEFT;
41 if (adc_key_in < 790) return btnSELECT;
42 return btnNONE; // when all others fail, return this...
43 }
44
45 void setup()
46
47 {
48 lcd.begin(16, 2); // start the library
49 lcd.setCursor(0,0);
50 lcd.print("Push the buttons"); // print a simple message
51 }
52
53
54
void loop()
55 {
56 lcd.setCursor(9,1); // move cursor to second line "1" and 9 spaces over
57 lcd.print(millis()/1000); // display seconds elapsed since power-up
58
59
60 lcd.setCursor(0,1); // move to the begining of the second line
61
62
lcd_key = read_LCD_buttons(); // read the buttons
63
64 switch (lcd_key) // depending on which button was pushed, we perform an
65 {
66 case btnRIGHT:
67 {
68 lcd.print("RIGHT ");
69
70
break;
71 }
72 case btnLEFT:
73 {
74 lcd.print("LEFT ");
75 break;
76
}
77
78 case btnUP:
79 {
80 lcd.print("UP ");
81 break;
82 }
83 case btnDOWN:
84
85 {
86 lcd.print("DOWN ");
87 break;
88 }
89 case btnSELECT:
{
lcd.print("SELECT");
break;
}
case btnNONE:
{
lcd.print("NONE ");
break;
}
}

You might also like