a function-definition is not allowed here before '{' token

Hola.
Tengo un problema en mi programa, el cual quiero hacer un reloj y al mismo tiempo un submenú basandome es esta pagina Varios botones con una sola entrada analógica - el blog de giltesa.
He quitado la parte del reloj pero sigue dandome problemas, contado linea por linea y aun asi no logro dar con el problema. Espero me puedan ayudar.
Saludos.

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F,20,4); //Configuracion de mi LCD e interfaz I2c. SDA en A4 y SCL en A5

byte arrowDown[8]	= {B00000, B01110, B01110, B01110, B11111, B01110, B00100};	// Caracteres personalizados para el LCD
byte cursorLCD[8]	= {B00000, B00000, B00110, B01111, B01111, B00110, B00000};
byte ledOn[8]		= {B00000, B01110, B10001, B10001, B01010, B01110, B01110};
byte white[8]		= {B11111, B11111, B11111, B11111, B11111, B11111, B11111};

int ExtractorU=2; //Salidas.
int ExtractorD=3;
              
int luzu=4; 
int luzd=5;

int minutos=0;    //Defino variables de reloj.
int segundos=0;
int horas=0;




void setup()
{
   lcd.begin(20, 4); //Indicamos que tipo de pantalla es.
  lcd.backlight(); //Iniciamos pantalla
  lcd.init();
  
  pinMode(luzu, OUTPUT);        //Mis salidas.
  pinMode(luzd, OUTPUT);
  pinMode(ExtractorU,OUTPUT);
  pinMode(ExtractorD,OUTPUT);

               
 lcd.createChar(0, cursorLCD);   // Se añaden los caracteres especiales al objeto LCD:
 lcd.createChar(1, arrowDown);
 lcd.createChar(2, ledOn);
 lcd.createChar(3, white);
  
}
void loop()
{
  
  segundos++; //Incremento en 1 los segundos
  delay(1000); //Espero 1 seg
  if (segundos>59){ //Si segundos pasa de 59, aumento 1 a minutos
      minutos++;
      segundos=0;     //segundos vuelvo a 0 
  }
  if (minutos>59){   //si minutos es mas de 59, aumento 1 a horas
  horas++;
  minutos=0;        //vuelve a 0 los minutos
  }
  lcd.setCursor(0, 0); //Posicioneamos donde queremos escribir,
  if (horas<10){       //Si horas es menor a 10 imprime 0
      lcd.print("0");
  }
  lcd.print(horas);   //Imprimimos el valor que tengamos en horas
  lcd.print(":");     //Si el valor de horas es mas de 10, se sustituira el 0 creado anteriormente
  if (minutos<10){
     lcd.print("0");
   }
   lcd.print(minutos);  //igual que con horas
   lcd.print(":");
    if (segundos<10){
        lcd.print("0");
    }
 
 if (horas>22)
 horas=0; 
/*Comienza la prog de submenu, implementar salidas 2, 3 y 4 en vez de intensidad de led*/
	// Guarda el resultado leído de una pulsación por teclado:
	{
  char resultButton[7] = "null";
 
	// Se imprime la pantalla de inicio:
	lcd.setCursor(6, 0); lcd.print("Menu MTTO");
	lcd.setCursor(0, 1); lcd.print("LUCES Y EXTRACTORES");
	lcd.setCursor(7, 3); lcd.print("Pulse "); lcd.write(byte(1));
 
	// Se comprueba si se ha pulsado un botón:
	getButtonPush( resultButton, 0, 200);
 
	// Si se pulsa la tecla abajo, se entra en el menú:
	if( !strcmp(resultButton,"bottom"))
		LCDmenu();
}
// MENU PRINCIPAL, DA OPCION PARA ABRIR EL MENU 1 Y MENU 2, TAMBIEN PARA SALIR A LA PANTALLA PRINCIPAL
void LCDmenu()
{
	char resultButton[7];
	int posCursor=0, opcMenu=-2;
 
 
	// Menu
	lcd.clear();
	lcd.setCursor(2, 0); lcd.print("Luces"); //Encender LED
	lcd.setCursor(2, 1); lcd.print("Extractores");
	lcd.setCursor(2, 2); lcd.print("Salir");
 
 
	// Mientras no se pulse sobre salir, no se saldrá a la pantalla principal:
	do{
		strcpy(resultButton,"null");
		getButtonPush( resultButton, 0, 200);
 
		// Cursor que indica la opción seleccionada:
		lcd.setCursor(0, posCursor); lcd.write(byte(0));
 
		// Desplaza el cursor arriba o abajo:
		if(!strcmp(resultButton,"up"))
			LCDMueveCursor(&posCursor, 2, 'r');	// Se resta una posición al cursor
 
		else if(!strcmp(resultButton,"bottom"))	// Se suma una posición al cursor
			LCDMueveCursor(&posCursor, 2, 's');
 
		else if(!strcmp(resultButton,"right"))
			opcMenu = posCursor;				// Al pulsar a la derecha (para acceder a esa opcion) se actualiza la opción de menú elegida según donde esta el cursor ahora.
 
 
		// Según la opción elegida del menú, se llama a otro menú o se cierra el menú actual:
		switch( opcMenu )
		{
			case 0:				// Se accede al menú de encendido y apagado de Luz. 
				LCDmenu0();
				opcMenu = -2;
				break;
			case 1:				// Se accede al menú de ajuste de brillo de los leds.
				LCDmenu1();
				opcMenu = -2;
				break;
			case 2:				// Salir a la pantalla principal.
				opcMenu = -1;
				lcd.clear();
				break;
		};
	}
	while(opcMenu != -1);
}
// MENU PARA EL ENCENDIDO Y APAGADO DE LUZ
void LCDmenu0()
{
	char resultButton[7];
	int posCursor=0, opcMenu=-2;
 
 
	// Menu
	lcd.clear();
	lcd.setCursor(2, 0); lcd.print("Luz Lobby");
	lcd.setCursor(2, 1); lcd.print("Luz exterior");
	lcd.setCursor(2, 2); lcd.print("Salir");
       // Mientras no se pulse sobre salir, no se saldrá al Menú:
	do{
		strcpy(resultButton,"null");
		getButtonPush( resultButton, 0, 200);
 
		// Cursor que indica la opcion seleccioanda:
		lcd.setCursor(0, posCursor); lcd.write(byte(0));
 
		// Desplaza el cursor arriba o abajo,:
		if(!strcmp(resultButton,"up"))
			LCDMueveCursor(&posCursor, 2, 'r');	// Se resta una posición al cursor
 
		else if(!strcmp(resultButton,"bottom"))	// Se suma una posición al cursor
			LCDMueveCursor(&posCursor, 2, 's');
 
		else if(!strcmp(resultButton,"right") || !strcmp(resultButton,"left"))
			opcMenu = posCursor;
 
 
		// Según la opción elegida del menú, se le cambia el estado a un LED, al otro o se cierra el menú actual:
		switch( opcMenu )
		{
			// Luz lobby
			case 0:
				if(!strcmp(resultButton,"right"))		// A la derecha se enciende.
				{
					if(luzu == LOW)  		// Se enciende.
					digitalWrite(luzu, HIGH);
					ledY_E = true;
				}
				else if( !strcmp(resultButton,"left") ) //  Asi se apaga
				{
					digitalWrite(luzu==LOW);
					ledY_E = false;
				}
 
				opcMenu = -2;
				LCDBombillasLed( ledY_E, 0);
			break;
 
			// Luz Exterior
			case 1:
				if(!strcmp(resultButton,"right"))
				{
					if(luzd==LOW) 
					digitalWrite(luzd, HIGH);
					ledB_E = true;
				}
				else if( !strcmp(resultButton,"left") )
				{
					digitalWrite(luzd==LOW);
					ledB_E = false;
				}
 
				opcMenu = -2;
				LCDBombillasLed( ledB_E, 1);
			break;
 
			// Salir
			case 2:
				if(!strcmp(resultButton,"right"))
					opcMenu = -1;
			break;
		};
	}
	while(opcMenu != -1);
 
	// Al salir del Menu1 se imprime el menú anterior:
	lcd.clear();
	lcd.setCursor(2, 0); lcd.print("Luces"); //Encender LED
	lcd.setCursor(2, 1); lcd.print("Extractores");
	lcd.setCursor(2, 2); lcd.print("Salir");
 
}
 


void getButtonPush(char *resultButton, int pin, int pause)
{
	// Precondición:	El parámetro pin ha de ser un pin Analógico del Arduino.
	// Poscondición:	El parámetro resultButton es una cadena por referencia que devolverá el botón pulsado.
	//					El parámetro pause ha de ser un numero entero igual o mayor que 0.
	// Info:			El teclado usado es este: http://giltesa.com/?p=11458 , según el tipo de resistencias habrá que cambiar las condicionales para adaptarse al valor leído desde el pin Analógico.
 
	int data = analogRead(0);
 
	if (data > 10)
	{
		if (data > 500 && data < 540)
			strcpy(resultButton,"up");
		else if (data > 330 && data < 370)
			strcpy(resultButton,"left");
		else if (data > 240 && data < 280)
			strcpy(resultButton,"bottom");
		else if (data > 190 && data < 230)
			strcpy(resultButton,"right");
 
		delay(pause);
	}



}
 if (horas>22)
 horas=0; 
/*Comienza la prog de submenu, implementar salidas 2, 3 y 4 en vez de intensidad de led*/
 // Guarda el resultado leído de una pulsación por teclado:
 {
  char resultButton[7] = "null";

Hay un '{' extra por ahí. ¿El if de arriba es de una sola instrucción?

Hola Lucario. Muchas gracias por tu respuesta.
Así es, ese if es de solo una instrucción. Ese { tiene su par y sirve para definir mi menú principal.

Me indica error en la linea 90 "function-definition is not allowed here before '{' token" y en la 254 "expected '}' at end of input".
No logro dar con el fallo.
Saludos

Ya he resuelto el problema.
Todo es culpa a mi novates en esto de la programación, quería declarar sub-rutinas dentro de sub-rutinas, llaves donde no deberían de ir, etc.
Estoy comenzando a volver a escribir mi programa refinando el reloj sin delay, bien declaradas mis rutinas y en cuanto este terminado espero postearlo para que me den el visto bueno.
Saludos.