1602 LCD Keypad Shield
[Arduino] / LCD_Keypad_Shield / LCD_Keypad_Shield.ino
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