From: Dobrica Pavlinusic Date: Thu, 25 Jun 2015 15:12:25 +0000 (+0200) Subject: 1602 LCD Keypad Shield X-Git-Url: http://git.rot13.org/?a=commitdiff_plain;h=c95892b439e1b63ab11a7115ae706d12a09f1831;p=Arduino 1602 LCD Keypad Shield http://www.icstation.com/1602-keypad-shield-blue-backlight-arduino-duemilanove-p-1471.html --- diff --git a/LCD_Keypad_Shield/LCD_Keypad_Shield.ino b/LCD_Keypad_Shield/LCD_Keypad_Shield.ino new file mode 100644 index 0000000..380e710 --- /dev/null +++ b/LCD_Keypad_Shield/LCD_Keypad_Shield.ino @@ -0,0 +1,79 @@ + +//example use of LCD4Bit_mod library + +#include +//create object to control an LCD. +//number of lines in display=1 +LCD4Bit_mod lcd = LCD4Bit_mod(2); + +//Key message +char msgs[5][15] = {"Right Key OK ", + "Up Key OK ", + "Down Key OK ", + "Left Key OK ", + "Select Key OK" }; +int adc_key_val[5] ={30, 150, 360, 535, 760 }; +int NUM_KEYS = 5; +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 + + lcd.init(); + //optionally, now set up our application-specific display settings, overriding whatever the lcd did in lcd.init() + //lcd.commandWrite(0x0F);//cursor on, display on, blink on. (nasty!) + lcd.clear(); + lcd.printIn("KEYPAD testing... pressing"); +} + +void loop() { + + adc_key_in = analogRead(0); // 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(0); // read the value from the sensor + key = get_key(adc_key_in); // convert into key press + if (key != oldkey) + { + oldkey = key; + if (key >=0){ + lcd.cursorTo(2, 0); //line=2, x=0 + lcd.printIn(msgs[key]); + } + } + } + + //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; +} diff --git a/LCD_Keypad_Shield/code.txt b/LCD_Keypad_Shield/code.txt new file mode 100644 index 0000000..78db954 --- /dev/null +++ b/LCD_Keypad_Shield/code.txt @@ -0,0 +1,79 @@ + +//example use of LCD4Bit_mod library + +#include +//create object to control an LCD. +//number of lines in display=1 +LCD4Bit_mod lcd = LCD4Bit_mod(2); + +//Key message +char msgs[5][15] = {"Right Key OK ", + "Up Key OK ", + "Down Key OK ", + "Left Key OK ", + "Select Key OK" }; +int adc_key_val[5] ={30, 150, 360, 535, 760 }; +int NUM_KEYS = 5; +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 + + lcd.init(); + //optionally, now set up our application-specific display settings, overriding whatever the lcd did in lcd.init() + //lcd.commandWrite(0x0F);//cursor on, display on, blink on. (nasty!) + lcd.clear(); + lcd.printIn("KEYPAD testing... pressing"); +} + +void loop() { + + adc_key_in = analogRead(0); // 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(0); // read the value from the sensor + key = get_key(adc_key_in); // convert into key press + if (key != oldkey) + { + oldkey = key; + if (key >=0){ + lcd.cursorTo(2, 0); //line=2, x=0 + lcd.printIn(msgs[key]); + } + } + } + + //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; +} \ No newline at end of file