Es que el codigo que has puesto no se parece nada a LCD.
No tengo idea de que se trata esa rutina, y porque necesitas "delayMicroseconds()" . Si puedes poner todo el codigo aca va a ser simple entender el contexto.
Yo tengo ese LCD-Keypad Shield y lo uso bastante.
Prueba si esto te funciona:
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
//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.clear();
lcd.begin(16,2);
lcd.print("KEYPAD test ... 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.setCursor(0, 0); //line=2, x=0
lcd.print(msgs[key]);
}
}
}
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;
}
... pero la verdad que si quieres buena ayuda, tienes que poner todo el codigo aqui para que veamos cual es el problema.
Todavia no entiendo porque necesitas usar "delayMicroseconds()" solo para un LCD.