Problema en código, comparación de valores!

Buen día, verán mi proyecto escolar es un dispensador de comida para mascotas, y todo va perfecto. El único problema es que no me detecta la comparación que he puesto.

void  Activar_servo (){

    lcd.setCursor(0, 0);
    lcd.print("Alarma on #:");
    lcd.print(contador);
    lcd.setCursor(0, 1);
    lcd.print("Peso: ");
    lcd.print(Apeso[contador]);
    lcd.print("Kg");

    for (int i = 0; i <=180; i += 1){
    motor.attach(6) ;
    motor.write(i);
    delay(15);
    }

    motor.detach();
    Llenado_de_plato ();
 }

 void Llenado_de_plato (){
  
   digitalWrite(9, HIGH);
   while(digitalRead(9)==HIGH){
    
    scale.set_scale(calibration_factor);
    Serial.print("Reading: ");
    units = scale.get_units(), 10;
    if (units < 0){
    units = 0.00;
    } 

   Serial.print(units);
   Serial.print(" kg"); 
   Serial.print(Apeso[contador]);
   Serial.print(" kg");
   Serial.println(" calibration_factor: ");
   Serial.print(calibration_factor);
   Serial.println();
   delay(100);
   }

   if(Serial.available()) {
   char temp = Serial.read();
   if(temp == '+' || temp == 'a')
   calibration_factor += 1;
   else if(temp == '-' || temp == 'z')
   calibration_factor -= 1;
   } 

    lcd.clear();
    Masa=Apeso[contador];
    if (units>=Masa){
    lcd.setCursor(0, 0);
    lcd.print("Alimento servido");
    lcd.setCursor(0, 1);
    lcd.print("Peso: ");
    lcd.print(Apeso[contador]);
    lcd.print("Kg");
    
    Desactivar_servo ();
     }
   }

 void Desactivar_servo (){

    digitalWrite(10, HIGH);
    digitalWrite(9, LOW);
    for (int i = 180; i >=0; i -= 1){
    motor.attach(6) ;
    motor.write(i);
    delay(15);

     }

El problema en sí es esta parte, ya que no me da la comparación para acceder a void Desactivar_servo();

    if (units>=Masa){
    lcd.setCursor(0, 0);
    lcd.print("Alimento servido");
    lcd.setCursor(0, 1);
    lcd.print("Peso: ");
    lcd.print(Apeso[contador]);
    lcd.print("Kg");
    
    Desactivar_servo ();
    }

"Apeso[contador]" es la cantidad de comida que se programa por medio de pulsadores y la he igualado a "Masa" para un uso más fácil, mientras que "units" es la lectura de un sensor de peso(galga extensiométrica). Ambas lecturas me las da en kilogramos. La única diferencia entre las variables es que una es de tipo "float" y la otra de tipo "float[]", no estoy seguro de si eso influya. Espero puedan ayudarme, sería de gran ayuda.

LeoDiaz:
El único problema es que no me detecta la comparación que he puesto.

Con el código incompleto es difícil ayudarte.

LeoDiaz:
La única diferencia entre las variables es que una es de tipo "float" y la otra de tipo "float[]", no estoy seguro de si eso influya. Espero puedan ayudarme, sería de gran ayuda.

Las variables que luego de su nombre tienen [] son matrices, osea un conjunto de elementos mientras que el nombre simple es una variable simple.

float n = 3.1416;
float m[] = {1.23, 4.56, 6.78};   //Contiene 3 float

Es bastante largo mi código, espero no sea una molesta pero he tenido que recortar algunas partes de él,espero no afecte en algo. Y muchas gracias.

#include <DS1307.h>
#include <SoftwareSerial.h>
#include <LiquidCrystal_I2C.h>
#include <HX711.h>
#include <Arduino.h>
#include <Wire.h>
#include <Servo.h>
//----------------------------------------------------------------------------
// 
LiquidCrystal_I2C lcd(0x27,16,2);
int rtc[7];
int Alarm [21];
int Ahora [21] ;
int Amin [21] ;
int Acontime [21] ;
float Apeso [21];
int estadoA =0 ;
int resulhora;
int resulmin;
int contador=0;
int conteo=0;
float calibration_factor = 48100;
float units;
float ounces;

//Variables de configuracion de hora
int Choras =0 ;
int Cminutos=0 ;
int Csegundos=0 ;
int Cdia=0 ;
int Cmes=0 ;
int Cano=0 ;
char fechaActual[20], horaActual[20]; //string para mostrar las lineas completas hora y fecha
//Variables de set cursor lcd
int columna ;
int fila ;
// Declaracion de botones 
const int boton1= 2; 
const int boton2= 3;
const int boton3= 4;
const int boton4= 5;
//Declaración de Leds


Servo motor;
#define servo_abierto
HX711 scale(7,8);
int i;
//-----------------------------------------------------------------------------

void setup() {
  //Leds de comandos
  pinMode(9,OUTPUT);
  pinMode(10,OUTPUT);
  pinMode(11,OUTPUT);
  
  //Inicialización de calibración del sensor de peso
  Serial.begin(9600);
   Serial.println("HX711 calibration sketch");
   Serial.println("Remove all weight from scale");
   Serial.println("After readings begin, place known weight on scale");
   Serial.println("Press + or a to increase calibration factor");
   Serial.println("Press - or z to decrease calibration factor");

  scale.set_scale();
  scale.tare();

  long zero_factor = scale.read_average(); 
   Serial.print("Zero factor: ");
   Serial.println(zero_factor);
   
  //Declaracion de botones como entrada
  pinMode(boton1, INPUT); // Arriba
  pinMode(boton2, INPUT); // Abajo
  pinMode(boton3, INPUT);
  pinMode(boton4, INPUT); //ok

Wire.begin();
  lcd.begin(16, 2); 
  Wire.begin();
  lcd.init();
  lcd.backlight();
  lcd.clear();
  
  fila=5;  
  Menu_principal();
  }

void loop () {
   
 }
   
//---------------Menu principal----------------

void Menu_principal (){
   do{
       lcd.clear();
     do{
   lcd.setCursor(0, 0);
   lcd.print("1- Reloj");
   lcd.setCursor(0, 1);
   lcd.print("2- Alarmas");
   
   if (digitalRead (boton1)==HIGH){
   delay(50);
   Reloj ();
   
   }
   if (digitalRead (boton2)==HIGH){
   delay(50);
   Alarmas ();
   }
   } while(digitalRead(boton4) != HIGH);
   delay(100);
   } while(digitalRead(boton4) != HIGH);
   delay(100);
   esperar_activacion();
   
 }
//----------Menu mostrar y ajustar reloj-----------------------
void Reloj (){
do{
   lcd.setCursor(0, 0);
   lcd.print("1- Mostrar Reloj");
   lcd.setCursor(0, 1);
   lcd.print("2- Ajustar Reloj");
   
   if (digitalRead (boton1)==HIGH){
   delay(50);
   lcd.clear ();
   Mostrar_Fecha_Hora ();
   }
   if (digitalRead (boton2)==HIGH){
   lcd.clear ();
   delay(50);
   sprintf(horaActual, "%02d:%02d:%02d", Choras,Cminutos, Csegundos);
   lcd.setCursor(4, 1); // abajo a la izquierda         
   lcd.print(horaActual);
   Ajustar_Fecha_Hora ();
   }
   } while(digitalRead(boton4) != HIGH);
    
   Menu_principal();
   }
   

//----------Ajustar alarmas-----------------   
void Alarmas (){
do{
   lcd.setCursor(0, 0);
   lcd.print("1- Mostrar Alarmas");
   lcd.setCursor(0, 1);
   lcd.print("2- Ajustar Alarma");
   
   if (digitalRead (boton1)==HIGH){
   delay(50);
   lcd.clear ();
   Mostrar_Alarmas ();
   }
   if (digitalRead (boton2)==HIGH){
   lcd.clear ();
   delay(50);
   sprintf(horaActual, "%02d:%02d:%02d", Choras,Cminutos, Csegundos);
   lcd.setCursor(4, 1); // abajo a la izquierda         
   lcd.print(horaActual);
   Ajustar_Alarmas ();
   }
   } while(digitalRead(boton4) != HIGH);
    
   Menu_principal();
   }
//--------------------------------------  
void Mostrar_Alarmas (){
    lcd.clear ();

do{  
  
   lcd.setCursor(0, 0);
   lcd.print("Seleccionar Alarma");
   lcd.setCursor(0, 1);  
   lcd.print("Alarma #:");
   
   if (digitalRead (boton1)==HIGH){
   estadoA=estadoA+1;  
   delay(50);     
   if (estadoA>20){
   lcd.clear ();
   estadoA=0;  
    }  
    }
   if (digitalRead (boton2)==HIGH){
   estadoA=estadoA-1;  
   delay(50);     
   if (estadoA<0){
   lcd.clear ();  
   estadoA=20;  
    }  
    }
    lcd.setCursor(9, 1);
    lcd.print(estadoA);
   
   if (digitalRead (boton3)==HIGH){
   delay(100);
   ver_alarma ();  
   }
   } while(digitalRead(boton4) != HIGH);
   delay(100);
   Alarmas();
   }  


//---------------peso--------------------
  do{
    lcd.setCursor(0, 0);
    lcd.print("Configurar peso");
      
    if (digitalRead (boton1)==HIGH){
    Apeso[estadoA]=Apeso[estadoA]+0.1; 
    delay(50);
    if (Apeso[estadoA]>5){
    lcd.clear (); 
    Apeso[estadoA]=0.5;
    } 
    }  
    if (digitalRead (boton2)==HIGH){
    Apeso[estadoA]=Apeso[estadoA]-0.1; 
    delay(50);
    if (Apeso[estadoA]<0.5){
    lcd.clear (); 
    Apeso[estadoA]=5;     
    } 
    }
    lcd.setCursor(0, 1);
    lcd.print("Peso:");
    lcd.setCursor(6, 1);
    lcd.print(Apeso[estadoA]);
    lcd.print("Kg");
    Acontime[estadoA]=Apeso[estadoA]*100 ;
    
    } while(digitalRead(boton3) != HIGH);
    estadoA=0;
    delay(100);
    
    Ajustar_Alarmas ();
    }
 
void esperar_activacion(){
    lcd.clear ();
 do{ 
 lcd.setCursor(0, 0);
    lcd.print("Esperando alarma");
    
    for (contador = 0; contador <=20; contador++){ 
    lcd.setCursor(0, 1);
    
    RTC.get(rtc,true); 
    resulhora=rtc[2]-Ahora[contador];
    resulmin=rtc[1]-Amin[contador];
    lcd.setCursor(4, 1);
    sprintf(horaActual, "%02d:%02d:%02d",rtc[2],rtc[1],rtc[0]);
    lcd.print(horaActual);
    if (resulhora==0 & resulmin==0){
    lcd.clear ();  
    Activar_servo ();
          
    }  
    }
     
    } while(digitalRead(boton4) != HIGH);
    delay(100);
    Menu_principal();
} 

 void  Activar_servo (){
    lcd.setCursor(0, 0);
    lcd.print("Alarma on #:");
    lcd.print(contador);
    lcd.setCursor(0, 1);
    lcd.print("Peso: ");
    lcd.print(Apeso[contador]);
    lcd.print("Kg");
    for (int i = 0; i <=180; i += 1){
    motor.attach(6) ;
    motor.write(i);
    delay(15);
    }
    motor.detach();
    Llenado_de_plato ();
 }
 void Llenado_de_plato (){
  digitalWrite(9, HIGH);
  while(digitalRead(9)==HIGH){
    
    scale.set_scale(calibration_factor);
    Serial.print("Reading: ");
    units = scale.get_units(), 10;
    if (units < 0){
    units = 0.00;
    } 
   Serial.print(units);
   Serial.print(" kg"); 
   Serial.print(Apeso[contador]);
   Serial.print(" kg");
   Serial.println(" calibration_factor: ");
   Serial.print(calibration_factor);
   Serial.println();
   delay(1000);
   }
   if(Serial.available()) {
   char temp = Serial.read();
   if(temp == '+' || temp == 'a')
   calibration_factor += 1;
   else if(temp == '-' || temp == 'z')
   calibration_factor -= 1;
   } 
    lcd.clear();
    if ((units)>=(Apeso[contador])){
    lcd.setCursor(0, 0);
    lcd.print("Alimento servido");
    lcd.setCursor(0, 1);
    lcd.print("Peso: ");
    lcd.print(Apeso[contador]);
    lcd.print("Kg");
    
    Desactivar_servo ();
    }
 }
 void Desactivar_servo (){
    digitalWrite(10, HIGH);
    digitalWrite(9, LOW);
    for (int i = 180; i >=0; i -= 1){
    motor.attach(6) ;
    motor.write(i);
    delay(15);
     }
    motor.detach();
    esperar ();
   }
void esperar (){   
 
  do{
    lcd.setCursor(0, 0);
    lcd.print("Reactivacion en :");
    lcd.setCursor(2, 1);
    RTC.get(rtc,true); 
    resulhora=rtc[2]-Ahora[contador];
    resulmin=rtc[1]-Amin[contador];
    conteo=60-rtc[0] ;
    lcd.print(conteo);
    lcd.print(" Segundos");
} while(resulhora==0 & resulmin==0);
  
  lcd.clear();
  esperar_activacion();
}

La activación del servo si ocurre, se pasa al void Llenado_de_plato. He modificado un poco el programa, ya que en la pantalla Serial no me detectaba ningún peso con "Masa", pero al poner "Apeso[contador]" aparece el peso que establecí, el problema sigue siendo el mismo, no me detecta que units sea mayor que "Apeso" y por lo tanto no entra al void Desactivar_servo.

No tienes un error aca?

void Llenado_de_plato (){
  digitalWrite(9, HIGH);                // pones en high pin 9
  while (digitalRead(9)){               // lees pin 9, cómo?

Cuando presentes a una comunidad un proyecto grande como este, es bueno que indiques que cosas estan conectadas a que.

Como en el código no esta claro, deberías indicarlo al menos en un post.

El pin 9 que es LECTURA o ESCRITURA. Lo usas varias veces para poner el pin en LOW o HIGH pero tambien para leerlo, algo que no tiene sentido.

Te recomiendo que desde el IDE apliques Auto Formato para que te ayude a indentar, eso te mostrara que sobran y faltan llaves.

void Mostrar_Alarmas (){
   lcd.clear ();
   do{  
      lcd.setCursor(0, 0);
      lcd.print("Seleccionar Alarma");
      lcd.setCursor(0, 1);  
      lcd.print("Alarma #:");
      if (digitalRead (boton1)==HIGH){
         estadoA=estadoA+1;  
         delay(50);     
         if (estadoA>20){
            lcd.clear ();
            estadoA=0;  
         }  
      }
      if (digitalRead (boton2)==HIGH){
      estadoA=estadoA-1;  
      delay(50);     
      if (estadoA<0){
         lcd.clear ();  
         estadoA=20;  
      }  
   }                                                                   //Sobra esta llave
      lcd.setCursor(9, 1);
      lcd.print(estadoA);
      if (digitalRead (boton3)==HIGH){
         delay(100);
         ver_alarma ();  
      }
   } while(digitalRead(boton4) != HIGH);
   delay(100);
   Alarmas();
}

Aqui no declaraste la función.

//---------------peso--------------------
do{

En la funcion Llenado_de_plato() falta cerrar una llave.

En un for() para incrementar la variable se pone i++ y para decrementar i--

for (byte i=0; i<100; i++){
   //Lo que quieras
}
for (byte i=100; i>0; i--){
   //Lo que quieras
}

Tu Loop() esta vacio.

Kike porque dices

Aqui no declaraste la función.
Code: [Select]

//---------------peso--------------------

do{

si al final del do { hay un while()

 } while(digitalRead(boton4) != HIGH);

surbyte:
Kike porque dices

Me refiero a la función de usuario, porque la función Mostrar_Alarmas() la cerro en la linea anterior al comentario.

Por eso le recomiendo que aplique Auto Formato.

//--------------------------------------  
void Mostrar_Alarmas(){
   lcd.clear ();
   do{   
      lcd.setCursor(0, 0);
      lcd.print("Seleccionar Alarma");
      lcd.setCursor(0, 1);  
      lcd.print("Alarma #:");
      if (digitalRead (boton1)==HIGH){
         estadoA=estadoA+1;  
         delay(50);     
         if (estadoA>20){
            lcd.clear ();
            estadoA=0;  
         }  
      }
      if (digitalRead (boton2)==HIGH){
         estadoA=estadoA-1;  
         delay(50);     
         if (estadoA<0){
            lcd.clear ();  
            estadoA=20;  
         }  
      }
      lcd.setCursor(9, 1);
      lcd.print(estadoA);  
      if (digitalRead (boton3)==HIGH){
         delay(100);
         ver_alarma ();  
      }
   }while(digitalRead(boton4) != HIGH);
   delay(100);
   Alarmas();
}  

//---------------peso--------------------
  do{
    lcd.setCursor(0, 0);

Ok. Veo que estabas en lo correcto.