//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] ={1, 520, 690, 770, 820 }; // max int NUM_KEYS = 5; int adc_key_in; int old_adc = 0; 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"); Serial.begin(115200); Serial.println("Keypad testing over serial"); } void loop() { adc_key_in = analogRead(0); // read the value from the sensor if (old_adc != adc_key_in) Serial.println(old_adc = adc_key_in); 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]); Serial.print("adc="); Serial.print(adc_key_in); Serial.print(" key="); Serial.println(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; }