Lucario448:
Dos cositas:
- delay bloquea el programa; entonces durante ese tiempo, todas las entradas son ignoradas.
- Para que no se REPITA (a manera de "loop") el mensaje de bienvenida, esta debe imprimirse en el setup.
Si quieres que se detecte la entrada en cualquier momento, pero aún así retrasando el cambio de los mensajes; ya ahí habría que jugar con millis también.
En efecto Lucario448 ( Se escucha aún mejor Mega Lucario448 jejeje
), hice lo que usted me recomendó (colocar primeros mensajes en el setup) y ha quedado fantástico, ya aprendí algo nuevo, muchas gracias.
Adjunto el código que llevo hasta hoy, sé que hace falta trabajarlo un poco más, pero ya va quedando 
// incluimos la libreria LiquidCrystal
#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
// --------------- Variable de salida
int ledPin=13;
// ---------------- Variables de lectura --------------
int inPin=3;
int inPin1=4;
int inPin2=5;
int inPin3=6;
// ---------------- Variables de asignación --------------
int val0=0;
int val1=0;
int val2=0;
int val3=0;
//---------------------- Inicio del programa ------------------
void setup()
{
Serial.begin(9600);
lcd.begin(16, 2); // establecemos el numero de columnas y filas del display
lcd.setCursor(3, 0);
lcd.print("Bienvenidos"); // enviamos el mensaje a mostrar en el display
delay(2000);
lcd.setCursor(0, 0);
lcd.print("Por favor Cierre");
lcd.setCursor(4, 1);
lcd.print("la tapa ");
delay(5000);
pinMode (ledPin,OUTPUT);
pinMode(inPin,INPUT);
pinMode(inPin1,INPUT);
pinMode(inPin2,INPUT);
pinMode(inPin3,INPUT);
}
//-------------------- Función Principal ----------------------
void loop()
{
val0=digitalRead(inPin);
if(val0 == HIGH)
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Seleccione tipo");
lcd.setCursor(4,1);
lcd.print(" de papel");
delay(2000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("1.Norm. 2.Firmin");
lcd.setCursor(3,1);
lcd.print("3.Otro");
delay(4000);
TiposPapel();
}
else
{
lcd.clear();
lcd.setCursor(0, 0); // enviamos el mensaje a mostrar en el display
lcd.print(" La Tapa aun no");
lcd.setCursor(0, 1);
lcd.print("ha sido cerrada");
delay(1000);
}
}
//-------------------- Función Secundaria ----------------------
void TiposPapel()
{
lcd.clear();
//--------- Papel 1 ----------
val1= digitalRead(inPin1);
if(val1 == HIGH)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Papel Normal");
lcd.setCursor(2,1);
lcd.print("Seleccionado");
delay(2000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Espere");
delay(1000);
papel1();
}
//--------- Papel 2 ----------
val2= digitalRead(inPin2);
if(val2 == HIGH)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Papel Firmin");
lcd.setCursor(2,1);
lcd.print("Seleccionado");
delay(2000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Espere");
delay(1000);
papel2();
}
//--------- Papel 3 ----------
val3= digitalRead(inPin3);
if(val3 == HIGH)
{
lcd.clear();
lcd.setCursor(5,0);
lcd.print("Otro");
lcd.setCursor(2,1);
lcd.print("Seleccionado");
delay(2000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Espere");
delay(1000);
papel3();
}
}
// --------------- Funciones para los tipos de papeles ------------------------
void papel1()
{
lcd.clear();
digitalWrite(ledPin,HIGH);
lcd.setCursor(0, 1); // enviamos la posicion del cursor al display (nota: la linea 1 es la segunda fila, empieza a contar en 0
contar(1);
}
void papel2()
{
lcd.clear();
digitalWrite(ledPin,HIGH);
lcd.setCursor(0, 1);
contar(2);
}
void papel3()
{
lcd.clear();
digitalWrite(ledPin,HIGH);
lcd.setCursor(0, 1);
contar(3);
}
// ------------------------------------------------------------------------------------------
// ------------------------------------------------------------------------------------------
void contar(byte minutos)
{ // Esta función bloquerará el programa hasta que el while muera
const unsigned long regresiva = minutos * 60000U; // Calculo de la duración de la cuenta regresiva, en milisegundos.
unsigned int segundosRestantes = minutos * 60; // Calculo de la cuenta regresiva para mostrar en la LCD, en segundos.
// Si el decremento intenta ir por debajo de cero... ups
unsigned long tAnterior = 0;
const unsigned long inicio = millis(); // Oh sí; para la cuenta usaremos el famoso millis. Guarda el momento en que se inició la cuenta.
while (millis() - inicio < regresiva) {
// El ciclo se mantiene vivo hasta que la diferencia del tiempo actual e inicial supere la duración requerida.
unsigned long tActual = millis();
if (tActual - tAnterior >= 1000) { // Actualizar el temporizador en la LCD cada segundo.
tAnterior = tActual;
imprimirTiempo(segundosRestantes);
segundosRestantes--;
}
}
}
void imprimirTiempo(unsigned int s) {
byte minuto = s / 60;
byte segundo = s % 60;
if (minuto < 10) {
lcd.print('0');
lcd.print(minuto);
} else {
lcd.print(minuto);
}
lcd.print(':');
if (segundo < 10) {
lcd.print('0');
lcd.print(segundo);
} else {
lcd.print(segundo);
}
lcd.setCursor(0, 1);
}
Agradezco la gran y valiosa ayuda Brindada.
y Ahora sí, el Contador queda SOLUCIONADO.
Una vez más muchas gracias.
Saludes. 