The lcd.print does not work for me

Hello:

I create a separate file called "MenuPrincipal.h", I create inside it a function called "void Menu_Principal()". When trying to compile it shows me this error indicated on a red line in this screenshot below.

Show message: 'lcd' was not declared in this scope.

MenuPrincipal.h

void Menu_Principal()
{
  // Contador de teclas y navegador.
  int opcion = 0;
  bool salir = false;
  const int seleccionMenu = 8;

  // Limpiar pantalla.
  lcd.clear();

  do
  {
    //******************************************************************
    // Dibujo el menĂş principal.
    String MENSAJES[] =
    {
      "** MENĂš PRINCIPAL **", // PosiciĂłn 0.
      "  ESTADO PRINCIPAL  ", // 1
      "  NOMBRE RELÉS      ", // 2
      "  NOMBRE SENSORES   ", // 3
      "  ENTRADA ANALĂ“GICA ", // 4
      "  CONFIGURACIĂ“N     ", // 5
      "  ACERCA DE...      ", // 6
      "  AYUDA             ", // 7
      "  EXTRA             ", // 8
      "  INICIO            ", // 9
      "                    ", // 10
      ">"                     // 11
    };

    switch (opcion)
    {
      case 0:
        lcd.setCursor(0, 0);     // LĂ­nea 1 del LCD.
        lcd.print(MENSAJES[0]);  // ** MENĂš PRINCIPAL **
        lcd.setCursor(0, 1);
        lcd.print(MENSAJES[1]);  // > ESTADO PRINCIPAL
        lcd.setCursor(0, 1);
        lcd.print(MENSAJES[11]); // >
        lcd.setCursor(0, 2);
        lcd.print(MENSAJES[2]);  //   NOMBRE RELÉS
        lcd.setCursor(0, 3);
        lcd.print(MENSAJES[3]);  //   NOMBRE SENSORES
        break;

      default:
        Serial.print(F("Fuera de rango"));
        break;
    }
  } while (salir == false);
}

LCD_Menu_y_submenu_02

// Include el cĂłdigo de la librerĂ­a.
#include <LiquidCrystal.h>
#include "MenuPrincipal.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 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_PULLUP); // Arriba.
  pinMode(A2, INPUT_PULLUP); // Abajo.
  pinMode(A3, INPUT_PULLUP); // Izquierda.
  pinMode(A4, INPUT_PULLUP); // Derecha.
  pinMode(A5, INPUT_PULLUP); // 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 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);
    Menu_Principal();
  }
}

Thank you very much partners.

lcd is declared in the .ino file after the include so it’s not known

Try with


// 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, 9, 4, 5, 6, 7);

#include "MenuPrincipal.h"

Thank you very much my very distinguished friend. It works now. I can now make menus with submenus.

It’s a bit of hack to work like this with .h files.

Since you don’t really seem to be familiar with multi file compilation and linking, You might be better off calling all the modules .ino and let the IDE group everything together. No include needed.

Why does the following style give compilation error (MenuPrincipal.h: No such file or directory).

#include <MenuPrincipal.h>

If you use angle brackets <> the search path is only in standard library places

If you use double quotes “” then it looks first in the current directory and then in “standard places”

1 Like

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.