Buenas:
Estoy usando el Proteus 8.12 SP0 simulando Arduino UNO, LCD 20x2 y el Virtual Terminal RS232, precisamente ahí debe motrar por ejemplo este mensaje al pulsar un pulsador.
Serial.print (F("Esta es la pulsación DERECHA nº: "));
Código cómpleto de Arduino hasta ahora este este ejemplo.
// Include el código de la librería.
#include <LiquidCrystal.h>
// Inicializa la librería con sus pines indicados.
// RS, RW, Enable, D4, D5, D6, D7.
//LiquidCrystal lcd(8, NULL, 9, 4, 5, 6, 7);
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
// Pin 10 para saber que es luz de fondo.
//const byte LuzFondo = 10;
// Variables.
// Pulsador Arriba.
byte estadoActualArriba1 = 0;
byte estadoActualArriba2 = 0;
byte estadoUltimoArriba = 0;
int contadorArriba = 0;
// Pulsador Abajo.
byte estadoActualAbajo1 = 0;
byte estadoActualAbajo2 = 0;
byte estadoUltimoAbajo = 0;
int contadorAbajo = 0;
// Pulsador Izquierda.
byte estadoActualIzquierda1 = 0;
byte estadoActualIzquierda2 = 0;
byte estadoUltimoIzquierda = 0;
int contadorIzquierda = 0;
// Pulsador Derecha.
byte estadoActualDerecha1 = 0;
byte estadoActualDerecha2 = 0;
byte estadoUltimoDerecha = 0;
int contadorDerecha = 0;
// Pulsador Ok / Enter.
byte estadoActualEnter1 = 0;
byte estadoActualEnter2 = 0;
byte estadoUltimoEnter = 0;
int contadorEnter = 0;
void setup()
{
Serial.begin(115200); // 115200
// La pantalla es de 20 caracteres y 4 filas.
lcd.begin(20, 4);
// Indicar luz de fondo como salida.
// pinMode(LuzFondo, OUTPUT);
// Configuración de pines como salidas digitales.
pinMode(13, OUTPUT);
// Configuración de pines como entradas digitales.
pinMode(A1, INPUT); // Arriba.
pinMode(A2, INPUT); // Abajo.
pinMode(A3, INPUT); // Izquierda.
pinMode(A4, INPUT); // Derecha.
pinMode(A5, INPUT); // Ok / Enter.
lcd.clear(); // Borra la pantalla y su posición superior izquierda.
lcd.setCursor(0, 1); // Línea 2 del LCD.
lcd.print(F(" Pantalla principal ")); // Muestra título en la LCD.
}
void loop()
{
// Pulsador Arriba.
estadoActualArriba1 = digitalRead(A1);
delay(10);
estadoActualArriba2 = digitalRead(A1);
// Si los estados no son iguales, el sketch no hace gran cosa.
if (estadoActualArriba1 == estadoActualArriba2)
{
// El código que sigue es idéntico al del anteerior ejemplo.
if (estadoActualArriba1 != estadoUltimoArriba)
{
if (estadoActualArriba1 == HIGH)
{
contadorArriba = contadorArriba + 1;
Serial.print (F("Esta es la pulsación ARRIBA nº: "));
Serial.println(contadorArriba);
}
}
}
estadoUltimoArriba = estadoActualArriba1;
if (contadorArriba % 2 == 0)
{
digitalWrite(13, LOW);
}
else
{
digitalWrite(13, HIGH);
}
// Pulsador Abajo.
estadoActualAbajo1 = digitalRead(A2);
delay(10);
estadoActualAbajo2 = digitalRead(A2);
// Si los estados no son iguales, el sketch no hace gran cosa.
if (estadoActualAbajo1 == estadoActualAbajo2)
{
// El código que sigue es idéntico al del anteerior ejemplo.
if (estadoActualAbajo1 != estadoUltimoAbajo)
{
if (estadoActualAbajo1 == HIGH)
{
contadorAbajo = contadorAbajo + 1;
Serial.print (F("Esta es la pulsación ABAJO nº: "));
Serial.println(contadorAbajo);
}
}
}
estadoUltimoAbajo = estadoActualAbajo1;
if (contadorAbajo % 2 == 0)
{
digitalWrite(13, LOW);
}
else
{
digitalWrite(13, HIGH);
}
// Pulsador Izquierda.
estadoActualIzquierda1 = digitalRead(A3);
delay(10);
estadoActualIzquierda2 = digitalRead(A3);
// Si los estados no son iguales, el sketch no hace gran cosa.
if (estadoActualIzquierda1 == estadoActualIzquierda2)
{
// El código que sigue es idéntico al del anteerior ejemplo.
if (estadoActualIzquierda1 != estadoUltimoIzquierda)
{
if (estadoActualIzquierda1 == HIGH)
{
contadorIzquierda = contadorIzquierda + 1;
Serial.print (F("Esta es la pulsación IZQUIERDA nº: "));
Serial.println(contadorIzquierda);
}
}
}
estadoUltimoIzquierda = estadoActualIzquierda1;
if (contadorIzquierda % 2 == 0)
{
digitalWrite(13, LOW);
}
else
{
digitalWrite(13, HIGH);
}
// Pulsador Derecha.
estadoActualDerecha1 = digitalRead(A4);
delay(10);
estadoActualDerecha2 = digitalRead(A4);
// Si los estados no son iguales, el sketch no hace gran cosa.
if (estadoActualDerecha1 == estadoActualDerecha2)
{
// El código que sigue es idéntico al del anteerior ejemplo.
if (estadoActualDerecha1 != estadoUltimoDerecha)
{
if (estadoActualDerecha1 == HIGH)
{
contadorDerecha = contadorDerecha + 1;
Serial.print (F("Esta es la pulsación DERECHA nº: "));
Serial.println(contadorDerecha);
}
}
}
estadoUltimoDerecha = estadoActualDerecha1;
if (contadorDerecha % 2 == 0)
{
digitalWrite(13, LOW);
}
else
{
digitalWrite(13, HIGH);
}
// Pulsador OK / Enter.
estadoActualEnter1 = digitalRead(A5);
delay(10);
estadoActualEnter2 = digitalRead(A5);
// Si los estados no son iguales, el sketch no hace gran cosa.
if (estadoActualEnter1 == estadoActualEnter2)
{
// El código que sigue es idéntico al del anteerior ejemplo.
if (estadoActualEnter1 != estadoUltimoEnter)
{
if (estadoActualEnter1 == HIGH)
{
contadorEnter = contadorEnter + 1;
Serial.print (F("Esta es la pulsación OK / ENTER nº: "));
Serial.println(contadorEnter);
}
}
}
estadoUltimoEnter = estadoActualEnter1;
if (contadorEnter % 2 == 0)
{
digitalWrite(13, LOW);
}
else
{
digitalWrite(13, HIGH);
}
}
Dejo esquema simulador Arduino y hex para que puedan probar.
LCD_Menu_y_submenu_01.zip (231.3 KB)