1602 LCD Keypad Shield
authorDobrica Pavlinusic <dpavlin@rot13.org>
Thu, 25 Jun 2015 15:12:25 +0000 (17:12 +0200)
committerDobrica Pavlinusic <dpavlin@rot13.org>
Thu, 25 Jun 2015 15:12:25 +0000 (17:12 +0200)
http://www.icstation.com/1602-keypad-shield-blue-backlight-arduino-duemilanove-p-1471.html

LCD_Keypad_Shield/LCD_Keypad_Shield.ino [new file with mode: 0644]
LCD_Keypad_Shield/code.txt [new file with mode: 0644]

diff --git a/LCD_Keypad_Shield/LCD_Keypad_Shield.ino b/LCD_Keypad_Shield/LCD_Keypad_Shield.ino
new file mode 100644 (file)
index 0000000..380e710
--- /dev/null
@@ -0,0 +1,79 @@
+
+//example use of LCD4Bit_mod library
+
+#include <LCD4Bit_mod.h> 
+//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;
+}\r
diff --git a/LCD_Keypad_Shield/code.txt b/LCD_Keypad_Shield/code.txt
new file mode 100644 (file)
index 0000000..78db954
--- /dev/null
@@ -0,0 +1,79 @@
+\r
+//example use of LCD4Bit_mod library\r
+\r
+#include <LCD4Bit_mod.h> \r
+//create object to control an LCD.  \r
+//number of lines in display=1\r
+LCD4Bit_mod lcd = LCD4Bit_mod(2); \r
+\r
+//Key message\r
+char msgs[5][15] = {"Right Key OK ", \r
+                    "Up Key OK    ", \r
+                    "Down Key OK  ", \r
+                    "Left Key OK  ", \r
+                    "Select Key OK" };\r
+int  adc_key_val[5] ={30, 150, 360, 535, 760 };\r
+int NUM_KEYS = 5;\r
+int adc_key_in;\r
+int key=-1;\r
+int oldkey=-1;\r
+\r
+void setup() { \r
+  pinMode(13, OUTPUT);  //we'll use the debug LED to output a heartbeat\r
+\r
+  lcd.init();\r
+  //optionally, now set up our application-specific display settings, overriding whatever the lcd did in lcd.init()\r
+  //lcd.commandWrite(0x0F);//cursor on, display on, blink on.  (nasty!)\r
+   lcd.clear();\r
+  lcd.printIn("KEYPAD testing... pressing");\r
+}\r
+\r
+void loop() {\r
+\r
+       adc_key_in = analogRead(0);    // read the value from the sensor  \r
+  digitalWrite(13, HIGH);  \r
+  key = get_key(adc_key_in);                   // convert into key press\r
+       \r
+       if (key != oldkey)                                  // if keypress is detected\r
+       {\r
+    delay(50);         // wait for debounce time\r
+               adc_key_in = analogRead(0);    // read the value from the sensor  \r
+    key = get_key(adc_key_in);                 // convert into key press\r
+    if (key != oldkey)                         \r
+    {                  \r
+      oldkey = key;\r
+      if (key >=0){\r
+      lcd.cursorTo(2, 0);  //line=2, x=0\r
+                       lcd.printIn(msgs[key]);\r
+      }\r
+    }\r
+  }\r
+  \r
+  //delay(1000);\r
+  digitalWrite(13, LOW);\r
+  \r
+\r
\r
+  \r
+  \r
+}\r
+\r
+// Convert ADC value to key number\r
+int get_key(unsigned int input)\r
+{\r
+       int k;\r
+    \r
+       for (k = 0; k < NUM_KEYS; k++)\r
+       {\r
+               if (input < adc_key_val[k])\r
+               {\r
+           \r
+    return k;\r
+        }\r
+       }\r
+    \r
+    if (k >= NUM_KEYS)\r
+        k = -1;     // No valid key pressed\r
+    \r
+    return k;\r
+}
\ No newline at end of file