Balanza con menu ERROR

hola grupo tengo problema con el código me tira este erro ('ControlPeso' was not declared in this scope
)

intente de todo y no lo puedo solucionar les dejo el código a ver si me pueden dar una ayuda gracias

//#include <SoftwareReset.hpp> //boton de reset para usar de tara
 
#include <Wire.h>      // libreria de comunicacion por I2C
#include <LiquidCrystal_I2C.h>    // libreria para LCD por I2C
#include "HX711.h"
 
LiquidCrystal_I2C lcd (0x27,20,4); //PANTALLA DE LCD
 
 
#define DEBUG_HX711
 
// Parámetro para calibrar el peso y el sensor
//
 
#define CALIBRACION 94812.00 // LA CALIBRACION SE SACA DE OTRO PROGRAMA DE HX711  CON UN PESO CONOCIDO
//#define CALIBRACION 143900 // Celda Ponis
//#define CALIBRACION 124000 // celda arduino 20kg
 
// Pin de datos y de reloj
byte pinData = A2;
byte pinClk = A3;
const int Rele = 9;
float peso = 0; // SE USA PARA DAR UNA FUNCION SI EL PESO ES MENOR O MAYOR O IGUAL DA UNA ORDEN
byte led = 5;
byte led1 =3;
byte btn1 =A6;
byte btn2 =A7;
//byte selectButton =A2;
 
//bool ControlPeso=0;
//bool xRiseUpButton=0;
//bool xRiseDownButton=0;

int categoria = 0;
int menu = 0;
int submenu = 0;
int peso1 = 10;

 
// Objeto HX711
HX711 bascula;
 
void setup() {
  Serial.begin(9600);
 
  lcd.setBacklight(HIGH);   // habilita iluminacion posterior de LCD
  lcd.begin(20, 4);
  lcd.setCursor (0 , 0);
  //        ("---Esperando peso---");
  lcd.print ("---Esperando peso---");
 
 
  //        ("  REAL      DESEADO ");
  //        ("0.000 Gr  |  0.000 Gr);
  //        ("---Esperando peso---");
  //        ("---Esperando peso---");
 
  delay(2000);
  lcd.clear();
  Serial.begin(9600);
 
  pinMode (btn1 ,INPUT_PULLUP);
  pinMode (btn2 ,INPUT_PULLUP);   //COMANDO PARA PRENDER EL RELE
  //pinMode (selectButton ,INPUT_PULLUP); //COMANDO PARA PRENDER EL RELE
 
  pinMode (Rele , OUTPUT); //COMANDO PARA PRENDER EL RELE
  pinMode ( led , OUTPUT);//COMANDO PARA PRENDER EL LED ROJO
  pinMode (led1, OUTPUT);//COMANDO PARA PRENDER EL LED VERDE
 

  // Iniciar sensor
  bascula.begin(pinData, pinClk);
  // Aplicar la calibración
  bascula.set_scale(CALIBRACION);
  // Iniciar la tara
  // No tiene que haber nada sobre la balanza
  bascula.tare();
}
 


void loop()
{

  int lectura1 = digitalRead(btn1);
  int lectura2 = digitalRead(btn2);

if(lectura1 == 0){
    if(categoria == 0){
      if(menu == 3){
        menu = 0;
      }
menu++;
}


switch(menu){
        case 1: Serial.println("Inicio"); 
        ControlPeso();
break;
        case 2: Serial.println("Parar"); break;
        case 3: Serial.println("Configurar"); break;
      }

if(categoria == 1){
 if(submenu == 4){
        submenu = 0;
      }
      submenu++;


      if(menu == 2){
        switch(submenu){
          case 1: Serial.println("peso 20 kg"); 
peso1 = 20;
break;
          case 2: Serial.println("peso 30 kg"); 
peso1 = 30;
break;
          case 3: Serial.println("peso 40 kg"); 
peso1 = 40;
break;
          case 4: Serial.println("peso 50 kg"); 
peso1 = 50;
break;
        }
      }

}

if(lectura2 == 0){
    if(categoria == 0) categoria++;     //Nuevo metodo
    if(categoria == 1 && submenu == 4){ //Nuevo metodo
      submenu = 0;                      //Nuevo metodo
      categoria = 0;                    //Nuevo metodo
    }                                   //Nuevo metodo
    while(!digitalRead(btn2));
  }


         
 
}
 
 
 
 
 
 
 
void ControlPeso(){
         float  peso = bascula.get_units(8); // cantidad de veces que pesa (), digitos que se muestran 3.  antes tenia en 0 la cantidad de pesadas
        lcd.setCursor(0, 0);
        lcd.print(" REAL    |  DESEADO ");
        lcd.setCursor(0, 1);
        lcd.print(peso, 4); // cantidad de caracteres que se muestran del float
        lcd.print (" Gr");
        lcd.print ("|");
        lcd.setCursor(11, 1);
        lcd.print(peso, 4); // cantidad de caracteres que se muestran del float
        lcd.print (" Gr");
 
 
       
        lcd.setCursor (0, 2);
        lcd.print ("     MEZCLA       ");
 
   if (peso >= 1.000 || digitalRead(Rele)== HIGH)
    {                                                             //SI LA BOLSA PESA + DE 25KG CORTA
      digitalWrite(Rele, HIGH);                                   // SE APAGA EL RELE                                                          
      digitalWrite (led, HIGH);                                   // SE PRENDE LED ROJO
      digitalWrite (led1, LOW);                                   // SE APAGA LED VERDE
     }
  if (peso < 0.999){                                                //SI EL PESO ES - DE 25KG SIGUE CARGANDO
    digitalWrite (Rele,LOW);                                      // SE PRENDE RELE
    digitalWrite(led , LOW);                                      //SE PRENDE LED ROJO QUE FALTA PESO
    digitalWrite(led1 , 1);                                       //SI ESTA EN 25KG SE APAGA LUZ VERDE
 
 }
}
 
}

Te falta la llave que cierra esto:

 if (lectura1 == 0) {
    if (categoria == 0) {
      if (menu == 3) {
        menu = 0;
      }
      menu++;
    }

Y te sobra la ultima del todo. Esto es una suposicion claro, solo tu sabes cuales son las que valen, pero es una cuestion de llaves.

me tira este error a hora 'ControlPeso' was not declared in this scope

if(lectura2 == 0){
    if(categoria == 0) categoria++;     //Nuevo metodo
    if(categoria == 1 && submenu == 4){ //Nuevo metodo
      submenu = 0;                      //Nuevo metodo
      categoria = 0;                    //Nuevo metodo
    }                                   //Nuevo metodo
    while(!digitalRead(btn2));
  }

me dice esto a hora (expected unqualified-id before 'if'
)

No lo se, solo tu sabes lo que tiene que hacer ese codigo y donde meter las llaves. Mirandolo otra vez solo puedo decir con certeza que te sobra la ultima llave de la funcion " void ControlPeso() "
Quita esa llave , vuelve al codigo original posteado y añade otra llave al final del loop, asi compila sin errores , pero no se si hace lo que quieres que haga.

Es imposible seguir tu código tal como lo has presentado.
En la IDE, menú Herramientas, pulsa en Autoformato.
Luego copia el código y adjuntalo tal como hiciste antes.

Como te dice @gonpezzi es una llave mal puesta pero encontrarla en tal desorden es imposible.

hola si lo pude solucionar a eso a hora si lo puedo subir , el tema que el menú no hace lo que quiero , apretó el botón y me aparece todo el menú y se sale

@joaquin661 por tu bien, usa AutoFormato si estas con el IDE de esa forma todo se acomoda y puedes ver si está correcto o no. Un código muy caótico desde la presentación, tal vez funcione pero por lo visto no es el caso, y es por eso que te recomiendo que uses el auto formato o CONTROL+T
Este código en un NANO compila

#include <Arduino.h>
//#include <SoftwareReset.hpp> //boton de reset para usar de tara

#include <Wire.h>      // libreria de comunicacion por I2C
#include <LiquidCrystal_I2C.h>    // libreria para LCD por I2C
#include "HX711.h"

LiquidCrystal_I2C lcd (0x27, 20, 4); //PANTALLA DE LCD

#define DEBUG_HX711

// Parámetro para calibrar el peso y el sensor

#define CALIBRACION 94812.00 // LA CALIBRACION SE SACA DE OTRO PROGRAMA DE HX711  CON UN PESO CONOCIDO
//#define CALIBRACION 143900 // Celda Ponis
//#define CALIBRACION 124000 // celda arduino 20kg

// Pin de datos y de reloj
byte pinData = A2;
byte pinClk = A3;
const int Rele = 9;
float peso = 0; // SE USA PARA DAR UNA FUNCION SI EL PESO ES MENOR O MAYOR O IGUAL DA UNA ORDEN
byte led = 5;
byte led1 = 3;
byte btn1 = A6;
byte btn2 = A7;
//byte selectButton =A2;

//bool ControlPeso=0;
//bool xRiseUpButton=0;
//bool xRiseDownButton=0;

int categoria = 0;
int menu = 0;
int submenu = 0;
int peso1 = 10;


// Objeto HX711
HX711 bascula;

void setup() {
  Serial.begin(9600);

  lcd.setBacklight(HIGH);   // habilita iluminacion posterior de LCD
  lcd.begin(20, 4);
  lcd.setCursor (0 , 0);
  //        ("---Esperando peso---");
  lcd.print ("---Esperando peso---");

  //        ("  REAL      DESEADO ");
  //        ("0.000 Gr  |  0.000 Gr);
  //        ("---Esperando peso---");
  //        ("---Esperando peso---");

  delay(2000);
  lcd.clear();
  Serial.begin(9600);

  pinMode (btn1 , INPUT_PULLUP);
  pinMode (btn2 , INPUT_PULLUP);  //COMANDO PARA PRENDER EL RELE
  //pinMode (selectButton ,INPUT_PULLUP); //COMANDO PARA PRENDER EL RELE

  pinMode (Rele , OUTPUT); //COMANDO PARA PRENDER EL RELE
  pinMode ( led , OUTPUT);//COMANDO PARA PRENDER EL LED ROJO
  pinMode (led1, OUTPUT);//COMANDO PARA PRENDER EL LED VERDE


  // Iniciar sensor
  bascula.begin(pinData, pinClk);
  // Aplicar la calibración
  bascula.set_scale(CALIBRACION);
  // Iniciar la tara
  // No tiene que haber nada sobre la balanza
  bascula.tare();
}

void loop() {
  int lectura1 = digitalRead(btn1);
  int lectura2 = digitalRead(btn2);

  if (lectura1 == 0) {
    if (categoria == 0) {
      if (menu == 3) {
        menu = 0;
      }
      menu++;
    }


    switch (menu) {
      case 1: Serial.println("Inicio");
        ControlPeso();
        break;
      case 2: Serial.println("Parar"); break;
      case 3: Serial.println("Configurar"); break;
    }

    if (categoria == 1) {
      if (submenu == 4) {
        submenu = 0;
      }
      submenu++;


      if (menu == 2) {
        switch (submenu) {
          case 1: Serial.println("peso 20 kg");
            peso1 = 20;
            break;
          case 2: Serial.println("peso 30 kg");
            peso1 = 30;
            break;
          case 3: Serial.println("peso 40 kg");
            peso1 = 40;
            break;
          case 4: Serial.println("peso 50 kg");
            peso1 = 50;
            break;
        }
      }

    }

    if (lectura2 == 0) {
      if (categoria == 0) categoria++;     //Nuevo metodo
      if (categoria == 1 && submenu == 4) { //Nuevo metodo
        submenu = 0;                      //Nuevo metodo
        categoria = 0;                    //Nuevo metodo
      }                                   //Nuevo metodo
      while (!digitalRead(btn2));
    }
  }
}

void ControlPeso() {
    float  peso = bascula.get_units(8); // cantidad de veces que pesa (), digitos que se muestran 3.  antes tenia en 0 la cantidad de pesadas
    lcd.setCursor(0, 0);
    lcd.print(" REAL    |  DESEADO ");
    lcd.setCursor(0, 1);
    lcd.print(peso, 4); // cantidad de caracteres que se muestran del float
    lcd.print (" Gr");
    lcd.print ("|");
    lcd.setCursor(11, 1);
    lcd.print(peso, 4); // cantidad de caracteres que se muestran del float
    lcd.print (" Gr");



    lcd.setCursor (0, 2);
    lcd.print ("     MEZCLA       ");

    if (peso >= 1.000 || digitalRead(Rele) == HIGH) {     //SI LA BOLSA PESA + DE 25KG CORTA
      digitalWrite(Rele, HIGH);                         // SE APAGA EL RELE
      digitalWrite (led, HIGH);                         // SE PRENDE LED ROJO
      digitalWrite (led1, LOW);                         // SE APAGA LED VERDE
    }
    if (peso < 0.999) {                                   //SI EL PESO ES - DE 25KG SIGUE CARGANDO
      digitalWrite (Rele, LOW);                         // SE PRENDE RELE
      digitalWrite(led , LOW);                          //SE PRENDE LED ROJO QUE FALTA PESO
      digitalWrite(led1 , 1);                           //SI ESTA EN 25KG SE APAGA LUZ VERDE
    }
  }

El Sketch usa 7858 bytes (25%) del espacio de almacenamiento de programa. El máximo es 30720 bytes.
Las variables Globales usan 571 bytes (27%) de la memoria dinámica, dejando 1477 bytes para las variables locales. El máximo es 2048 bytes.

Tal vez llego tarde y tu problema ahora esta con el menú.

Tal como tienes los botones cada vez que presiones algo menu se va a incrementar a toda velocidad. Lo minimo que debes hacer es usar un control de flanco.
Algo asi
Te lo muestro para un boton

  if (!electura1 && electura1Ant){
      if (categoria == 0) {
          if (menu == 3) {
              menu = 0;
          }
          menu++;      
  }
  lectura1Ant = lectura1;

Agrega lectura1Ant del mismo tipo de variable que lectura1, pero hazlo como global las dos, así

int lectura1, lectura1Ant = 0;

entonces cada vez que presiones y sea un flanco a low subirá 1 en el menú y no varias veces.

Hola , gracias por tu respuesta,hacer que cómpile ya pude pero al menú no lo puedo hacer andar

Lee mi sugerencia final.

Buenísimo voy a intentar eso a pena tenga un resultado lo publicó muchas gracias

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