Error "else' without a previous 'if"

Hola, obtengo este error al intentar subir mi código.
Este es mi código.

int Pir = 5;
int RELE = 2;
int RELE2 = 3;



boolean activado, detectado;

#include <SPI.h>			// incluye libreria bus SPI
#include <MFRC522.h>			// incluye libreria especifica para MFRC522

#define RST_PIN  6			// constante para referenciar pin de reset
#define SS_PIN  53			// constante para referenciar pin de slave select

MFRC522 mfrc522(SS_PIN, RST_PIN);	// crea objeto mfrc522 enviando pines de slave select y reset

byte LecturaUID[4]; 				// crea array para almacenar el UID leido
byte Usuario1[4]= {0x03, 0xD2, 0x7E, 0x1A} ;    // UID de tarjeta leido en programa 1
byte Usuario2[4]= {0x06, 0x76, 0x25, 0xD9} ;    // UID de llavero leido en programa 1





void setup() {

  pinMode(A1, INPUT);   // Pin fotoresistencia
  pinMode(10, OUTPUT);  // Pin buzzer
  pinMode(4, OUTPUT);   // Pin laser
  pinMode(2, OUTPUT);   //Rele 1
  pinMode(3, OUTPUT);   //Rele 2
  pinMode(5, INPUT);    //Modulo PIR
  
  

  Serial.begin(9600);   //Iniciamos comunicación
  tone(10, 200, 100);   //Sonido de Inicio
  delay(1000);
  tone(10, 200, 100);
  delay(1000);
  tone(10, 200, 100);
  digitalWrite(4, HIGH);  //Configuración de los Modulos Rele
  digitalWrite(2, HIGH);
  digitalWrite(3, HIGH);
  activado = false;
  detectado = false;


{
  {
  Serial.begin(9600);			// inicializa comunicacion por monitor serie a 9600 bps
  SPI.begin();				// inicializa bus SPI
  mfrc522.PCD_Init();			// inicializa modulo lector
  Serial.println("Listo");		// Muestra texto Listo
}
}


}




void loop() {

  rfid();

  int ldr = analogRead(A1);  //Se toma lectura


  if (ldr > 500) {           //Si es mayor a 500 la lectura
    detectado = true;
    sonido();
    rele();
    delay(1000);

    rfid();

}


{
  if(digitalRead(Pir) == HIGH)
  {
    digitalWrite(2, LOW);
    digitalWrite(3, LOW);
    delay(1000);
    
  }
  else
  {
    
    digitalWrite(2, HIGH);
    digitalWrite(3, HIGH);
    
  }
}

   

 }







  void sonido() {                     //Alarma a sonar
    for (int i = 200; i < 500; i++) {
      tone(10, i, 10000);
    
    }
  }    
    
  void rele(){                      //Funcionamiento de los Módulos Rele
    digitalWrite(2,LOW);
    digitalWrite(3,LOW);
    delay(80000);
    digitalWrite(2,HIGH);
    digitalWrite(3,HIGH);
    rfid();
  }
  
   

   







void rfid() {
  if ( ! mfrc522.PICC_IsNewCardPresent())		// si no hay una tarjeta presente
    return;						// retorna al loop esperando por una tarjeta
  
  if ( ! mfrc522.PICC_ReadCardSerial()) 		// si no puede obtener datos de la tarjeta
    return;						// retorna al loop esperando por otra tarjeta
    
    Serial.print("UID:");				// muestra texto UID:
    for (byte i = 0; i < mfrc522.uid.size; i++) {	// bucle recorre de a un byte por vez el UID
      if (mfrc522.uid.uidByte[i] < 0x10){		// si el byte leido es menor a 0x10
        Serial.print(" 0");				// imprime espacio en blanco y numero cero
        }
        else{						// sino
          Serial.print(" ");				// imprime un espacio en blanco
          }
          Serial.print(mfrc522.uid.uidByte[i], HEX);   	// imprime el byte del UID leido en hexadecimal
          LecturaUID[i]=mfrc522.uid.uidByte[i];   	// almacena en array el byte del UID leido      
          }
          
          Serial.print("\t");   			// imprime un espacio de tabulacion             
                    
          if(comparaUID(LecturaUID, Usuario1))		// llama a funcion comparaUID con Usuario1
          off();
            Serial.println("Bienvenido Usuario 1");// si retorna verdadero muestra texto bienvenido
          else if(comparaUID(LecturaUID, Usuario2))	// llama a funcion comparaUID con Usuario2
            Serial.println("Bienvenido Usuario 2");	// si retorna verdadero muestra texto bienvenida
           else						// si retorna falso
            Serial.println("No te conozco"); 		// muestra texto equivalente a acceso denegado          
                  
                  mfrc522.PICC_HaltA();  		// detiene comunicacion con tarjeta                
}

boolean comparaUID(byte lectura[],byte usuario[])	// funcion comparaUID
{
  for (byte i=0; i < mfrc522.uid.size; i++){		// bucle recorre de a un byte por vez el UID
  if(lectura[i] != usuario[i])				// si byte de UID leido es distinto a usuario
    return(false);					// retorna falso
  }
  return(true);						// si los 4 bytes coinciden retorna verdadero
}

void off(){
digitalWrite(2,HIGH);
    digitalWrite(3,HIGH);
    }

El error aparece en void rfid()

 Serial.print("\t");   			// imprime un espacio de tabulacion             
                    
          if(comparaUID(LecturaUID, Usuario1))		// llama a funcion comparaUID con Usuario1
          off();
            Serial.println("Bienvenido Usuario 1");// si retorna verdadero muestra texto bienvenido
          else if(comparaUID(LecturaUID, Usuario2))	// llama a funcion comparaUID con Usuario2
            Serial.println("Bienvenido Usuario 2");	// si retorna verdadero muestra texto bienvenida
           else						// si retorna falso
            Serial.println("No te conozco"); 		// muestra texto equivalente a acceso denegado          
                  
                  mfrc522.PICC_HaltA();  		// detiene comunicacion con tarjeta                

Código de Error :

C:\Users\jebot\AppData\Local\Temp\.arduinoIDE-unsaved202379-12276-ari2u3.na0p\sketch_aug9a\sketch_aug9a.ino: In function 'void rfid()':
C:\Users\jebot\AppData\Local\Temp\.arduinoIDE-unsaved202379-12276-ari2u3.na0p\sketch_aug9a\sketch_aug9a.ino:159:11: error: 'else' without a previous 'if'
           else if(comparaUID(LecturaUID, Usuario2)) // llama a funcion comparaUID con Usuario2
           ^~~~

exit status 1

Compilation error: 'else' without a previous 'if'

Ok, gracias, ya cargó el código, pero no me funciona, es un prototipo de alarma laser con sensor de movimiento pir, la idea es que cuando la alarma se active, se pueda desactivar con el modulo rfid, sin embargo, no pasa nada al acercar la tarjeta al módulo.

Bueno almenos antes del loop: asigna valores iniciales a los datos tipo bool antes del setup, segun lo que copiastes en el setup hay unas llaves innecesarias y esta demás nuevamente repetir Serial.begin(9600); y los pines analógicos no requieren inicialización, espero te ayude en algo.

Moderador:
Por favor, intenta darle formato debido usando la función disponible en el IDE de Arduino con la combinación de teclas CONTROL+T

Tal vez esto corrija el problema, te faltaron una llaves

f (comparaUID(LecturaUID, Usuario1)) { // llama a funcion comparaUID con Usuario1
    off();
  Serial.println("Bienvenido Usuario 1");
  }     // si retorna verdadero muestra texto bienvenido
  else if (comparaUID(LecturaUID, Usuario2))  // llama a funcion comparaUID con Usuario2
        Serial.println("Bienvenido Usuario 2");   // si retorna verdadero muestra texto bienvenida
  else                                        // si retorna falso
      Serial.println("No te conozco");          // muestra texto equivalente a acceso denegado

El error te lo dice claramente.
Else without o sea SIN un if previo y eso se debe a la falta de llaves
cuando tienes una sola instrucción debajo del if no hace falta llaves pero si tienes 2 si.

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