Tengo un problema de sintaxis


En la línea de "IF(ERROR==3){" tengo un problema. Alguien sabe que ocurre
El código completo es:

#include <Keypad.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(7,6,5,4,3,2);
const byte numRows=4; // Declaración filas del Ketpad
const byte numCols=4; //Delaración columnas del Keypad

int buzzer =13;
int chapa = 12;
int sensorpuerta=15;
int posLCD = 5;
int cantdigit = 4;
int key = 2004;
int tempkey;
int tempkeyx;
int cantdigitx = cantdigit;
int mult = cantdigit;
int error = 0;
char hexaKeys[numRows][numCols]=
{
    {'1','2','3','A'},
    {'4','5','6','B'},
    {'7','8','9','C'},
    {'*','0','#','D'},
  }; //Código de la disposición de conexiones de terminales del KeyPad.
  byte rowPins [numRows]={11,10,9,8}; //Filas del 0 al 3
  byte colPins [numCols]={A2,A3,A4,A5}; //Columnas del 0 al 3
  Keypad keypad=(Keypad makeKeymap(hexaKeys))rowPins,colPins,numRows,numCols);

void setup() {
lcd.begin(16,2);
pinMode(buzzer,OUTPUT);
pinMode(chapa, OUTPUT);
pinMode(sensorpuerta, INPUT);
digitalWrite(sensorpuerta, HIGH);
}
//Si la tecla es presionada, será guardada en la variable "keypressed"

void loop() {
lcd.setCursor(1,0); //Linea donde empieza a escribir en el LCD
lcd.print("Ingrese la clave"); //Escribe en el LCD
/*-_-_-_-_-_-_-_-_-_--_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_*/
char Keypad = keypad.getKey(); // Obtiene el valor del teclado
if(Keypad!=NO_KEY) //Verifica si la tecla no está siendo presionada
                        {
lcd.setCursor(posLCD,1); //Donde empieza a escribir
lcd.print("*"); //Muestra en pantalla
posLCD=posLCD + 1 ; //*cursor del LCD + 1 posición
mult--; //resta el contador de dígitos

if(mult==0)
{
  tempkey = (Keypad - 48) + key;
  }                                         //verifica el último digito ##Yo lo dudo##
if(mult!= 0)
{
  int multiplox = mult;
    tempkeyx= (Keypad - 48)*10;
  mult--;
  }
int tempkey= tempkeyx + tempkey;
}
cantdigitx--;
  if(cantdigit == 0){
  if(key== tempkey)//En caso de que la clave sea exitosa...
    {
    lcd.setCursor(5,1);
    lcd.print("♦ OK ♦"); //Muestra en pantalla
    delay(1000);
    lcd.setCursor(1,1);
    lcd.print("Puerta abierta"); //Muestra en pantalla
    digitalWrite(chapa,HIGH);
    delay(800);
    digitalWrite(chapa,LOW);
    delay(1000);
    int open = 10;
    int val = 0;
    while (open!=0){val=digitalRead(sensorpuerta);}
    if (val == LOW){open = 0;}
    else {digitalWrite(buzzer,HIGH);}}
    error = 0;
}
else { // En caso de que la clave sea incorrecta...
    lcd.setCursor(5,1);
      lcd.print("Error X"); //Muestra en pantalla
      delay (1000);
      error++;}
      cantdigitx= cantdigit;
      tempkey = 0;
      mult = cantdigit;
      posLCD = 5;

      lcd.setCursor(0,1);
      lcd.print ("    ");} //Muestra en pantalla
      
  if(error==3){                             // En caso de que la clave sea incorrecta 3 veces ...
  lcd.setCursor(3,1);
  lcd.print("Bloqueado X X X"); //Muestra en pantalla
  digitalWrite(buzzer,HIGH);
  delay(1000);
  digitalWrite(buzzer,LOW);
  error=0;

  lcd.setCursor(0,1);
  lcd.print ("    ")//Muestra en pantalla;
  }
  }

Es el código de una cerradura electrónica

La llave que tienes justo antes de ese if te esta cerrando el void loop y ese if queda fuera.
Si aprietas CTRL+T el IDE te ajusta automaticamente los espacios y ves que ese if queda totalmente a la izquierda.
Si pones el cursor en la primera llave del loop tambien te resalta la llave de cierre.

Moderador:
Por favor, lee las Normas del foro y no pongas titulos con consideraciones inútiles.
Lee el punto 5 sobre como poner titulos en este foro.
Los errores y códigos debes postearse con etiquetas.
Las capturas no sirven.

La llave del problema es esta

} //Muestra en pantalla

Y en laultima linea tienes un error del " ; " tendria que ser:

   lcd.print ("    ");//Muestra en pantalla;

Resumiendo.

#include <Keypad.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
const byte numRows = 4; // Declaración filas del Ketpad
const byte numCols = 4; //Delaración columnas del Keypad

int buzzer = 13;
int chapa = 12;
int sensorpuerta = 15;
int posLCD = 5;
int cantdigit = 4;
int key = 2004;
int tempkey;
int tempkeyx;
int cantdigitx = cantdigit;
int mult = cantdigit;
int error = 0;
char hexaKeys[numRows][numCols] =
{
    {'1','2','3','A'},
    {'4','5','6','B'},
    {'7','8','9','C'},
    {'*','0','#','D'},
}; //Código de la disposición de conexiones de terminales del KeyPad.
byte rowPins[numRows] = { 11,10,9,8 }; //Filas del 0 al 3
byte colPins[numCols] = { A2,A3,A4,A5 }; //Columnas del 0 al 3
Keypad keypad = (Keypad makeKeymap(hexaKeys))rowPins, colPins, numRows, numCols);

void setup() {
   lcd.begin(16, 2);
   pinMode(buzzer, OUTPUT);
   pinMode(chapa, OUTPUT);
   pinMode(sensorpuerta, INPUT);
   digitalWrite(sensorpuerta, HIGH);
}
//Si la tecla es presionada, será guardada en la variable "keypressed"

void loop() {
   lcd.setCursor(1, 0); //Linea donde empieza a escribir en el LCD
   lcd.print("Ingrese la clave"); //Escribe en el LCD
   /*-_-_-_-_-_-_-_-_-_--_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_*/
   char Keypad = keypad.getKey(); // Obtiene el valor del teclado
   if (Keypad != NO_KEY) //Verifica si la tecla no está siendo presionada
   {
      lcd.setCursor(posLCD, 1); //Donde empieza a escribir
      lcd.print("*"); //Muestra en pantalla
      posLCD = posLCD + 1; //*cursor del LCD + 1 posición
      mult--; //resta el contador de dígitos

      if (mult == 0) {
         tempkey = (Keypad - 48) + key;
      }                                         //verifica el último digito ##Yo lo dudo##
      if (mult != 0) {
         int multiplox = mult;
         tempkeyx = (Keypad - 48) * 10;
         mult--;
      }
      int tempkey = tempkeyx + tempkey;
   }
   cantdigitx--;
   if (cantdigit == 0) {
      if (key == tempkey)//En caso de que la clave sea exitosa...
      {
         lcd.setCursor(5, 1);
         lcd.print("♦ OK ♦"); //Muestra en pantalla
         delay(1000);
         lcd.setCursor(1, 1);
         lcd.print("Puerta abierta"); //Muestra en pantalla
         digitalWrite(chapa, HIGH);
         delay(800);
         digitalWrite(chapa, LOW);
         delay(1000);
         int open = 10;
         int val = 0;
         while (open != 0) { val = digitalRead(sensorpuerta); }
         if (val == LOW) { open = 0; }
         else { digitalWrite(buzzer, HIGH); }
      }
      error = 0;
   }
   else { // En caso de que la clave sea incorrecta...
      lcd.setCursor(5, 1);
      lcd.print("Error X"); //Muestra en pantalla
      delay(1000);
      error++;
   }
   cantdigitx = cantdigit;
   tempkey = 0;
   mult = cantdigit;
   posLCD = 5;

   lcd.setCursor(0, 1);
   lcd.print("    ");


   if (error == 3) {                             // En caso de que la clave sea incorrecta 3 veces ...
      lcd.setCursor(3, 1);
      lcd.print("Bloqueado X X X"); //Muestra en pantalla
      digitalWrite(buzzer, HIGH);
      delay(1000);
      digitalWrite(buzzer, LOW);
      error = 0;

      lcd.setCursor(0, 1);
      lcd.print("    ");    //Muestra en pantalla;
   }
}

}; //Código de la disposición
el ; hay no lleva cuando se cierra el corchete no se pone nada

Estás equivocado, ese ";" está perfectamente ubicado.

Veamos , además de las correcciones anteriores tiene mal la línea:

Keypad keypad = (Keypad makeKeymap(hexaKeys))rowPins, colPins, numRows, numCols);

Que deberia ser:

Keypad keypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, numRows, numCols); 

Funcionar no se si lo hará, pero por lo menos compila.

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