**[[data_logger|Data Logger]]** PCB ====== LCD & Keypad connector ====== ===== Description ===== Connect header (5x2) to connect to LCD & Keypad extension board.\\ Use 4 digital line for data transfer to LCD, 3 digital line to control LCD, and 1 analogue line to transfer information of key pressed. ===== Used Pins ===== Digital Output Pin: **23, 25, 27, 29, 31, 33, 35** (BackLite, EN, RS, DB4, DB5, DB6, DB7)\\ Analogue Input Pin: **A3** (Keypads)\\ Power Pin: GND, +5V (see [[data_logger_support|supported function]])\\ \\ {{:dl_1_0_0:board_pin_dl_lcd_keypad.png}}\\ ===== Example ===== ==== Jumpers ==== {{:dl_1_0_0:top-lcdkby.png}}\\ ==== Code ==== /* LCD & Keypad example Board: DATA LOGER ARDUINO MEGA SHIELD, 24.11.2011, V 1.0.0 Author: Dubravko Penezić 2011, Creative Commons BY-NC-SA Used pins: DOP-23, DOP-25, DOP-27, DOP-29, DOP-31, DOP-33, DOP-35, A3 */ // LCD pins int BeLi_LCD_pin = 23; int RS_LCD_pin = 27; int En_LCD_pin = 25; int D4_LCD_pin = 29; int D5_LCD_pin = 31; int D6_LCD_pin = 33; int D7_LCD_pin = 35; // include the library code: #include // initialize the library with the numbers of the interface pins LiquidCrystal lcd(RS_LCD_pin, En_LCD_pin, D4_LCD_pin, D5_LCD_pin, D6_LCD_pin, D7_LCD_pin); //Key message char msgs[6][15] = {"Right Key OK ", "Up Key OK ", "Down Key OK ", "Left Key OK ", "Select Key OK", " " }; //Analogue value for key int adc_key_val[6] ={30, 170, 390, 570, 790, 1024 }; //Number of keys int NUM_KEYS = 6; //Analog pin int aKeyPin = 3; //other variable int adc_key_in; int key=-1; int oldkey=-1; void setup() { pinMode(13, OUTPUT); //we'll use the debug LED to output a heartbeat // set up the LCD's number of columns and rows: pinMode(BeLi_LCD_pin, OUTPUT); digitalWrite(BeLi_LCD_pin, LOW); lcd.begin(20, 2); // Print a message to the LCD. lcd.print("KEYPAD testing press"); } void loop() { adc_key_in = analogRead(aKeyPin); // read the value from the sensor digitalWrite(13, HIGH); key = get_key(adc_key_in); // convert into key press if (key != oldkey) { // if keypress is detected delay(50); // wait for debounce time adc_key_in = analogRead(aKeyPin); // read the value from the sensor key = get_key(adc_key_in); // convert into key press if (key != oldkey) { if(key < 5) digitalWrite(BeLi_LCD_pin, HIGH); else digitalWrite(BeLi_LCD_pin, LOW); oldkey = key; if (key >=0){ lcd.setCursor(0, 1); lcd.print(" "); lcd.setCursor(0, 1); lcd.print(msgs[key]); lcd.print(" "); lcd.print(adc_key_in); } } } //delay(1000); digitalWrite(13, LOW); } // Convert ADC value to key number int get_key(unsigned int input) { int k; 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; }