Control de balanza y electroválvulas.

Buenas tardes, tengo este codigo.

El mismo consite de encender y apagar unas electrovalvulas, y a la vez el arduino esta conectado a una balanza por puerto serial.

la idea es que el codigo realice lo siguiente se le ingresa por otro puerto serial los kilos que quiero descargar.

Ejemplo en el monitor de la balanza me marca 200kilos, le ingreso por el puerto serial que quiero descargar 75 kilos, osea que deberia apagar a una electrovalvula , cuando el monitor de la balanza llegue a 125 kilos.

Este codigo que realize me funciona de esta manera el monitor de la balanza me marca 200kilos , le ingreso por el puerto serial que quiero descargar 75 kilos y me apaga la electrovalvula cuando el monitor de la balanza me marca 75 kilos osea que me descarga 125 kilos.

#include <SoftwareSerial.h>

SoftwareSerial Serial_2 (2, 3);

double Maximo = 0;
double Balanza = 0;
double SubBalanza = 0;

String serial_read;
String serial_balanza;

boolean setup_max = false;

int countPuerta = 0;


void setup() {
  pinMode(11,OUTPUT); // Puerta
  pinMode(10,OUTPUT); // Motor
  pinMode(9,OUTPUT); // Descarga
  pinMode(A0, OUTPUT); // SENSOR FINAL DE CARRERA
  Serial.begin(9600); // Conexion Bluetooth
  Serial_2.begin(9600);
}

void loop() {
  float final_de_carrera = digitalRead(A0);
  while (Serial_2.available()) {
    delay(5);
    char c = Serial_2.read();
    serial_balanza += c;
  }
  while (Serial.available()) {
    delay(5);
    char s = Serial.read();
    serial_read += s;
  }

  if (serial_balanza.length() > 0) {
    double subBalanza = serial_balanza.toDouble();
    if (subBalanza != Balanza) {
      Serial.println("Balanza: " + String(subBalanza));
    }
    Balanza = subBalanza;
  }
  if (serial_read.length() > 0) {
    if (isNumeric(serial_read)) {
      Maximo = serial_read.toDouble();
      setup_max = true;
      Serial.println("Maximo: " + String(Maximo));
    } else {
      command(serial_read);
    }
  }

if (setup_max) {
    double porcentaje = (Balanza * 100) / Maximo;
    if (porcentaje >= 95 && porcentaje <= 105) {
      if (porcentaje == 100) {
        digitalWrite(10,LOW);
        setup_max = false;
      } else {
        if (final_de_carrera == 0 && countPuerta < 30) { // SENSOR RETORNA 0 = CERRAR PUERTA, SENSOR RETORNA 1 = FRENAR CERRADO DE PUERTA.
          digitalWrite(9, HIGH);
          countPuerta += 1;
          delay(1000);
          digitalWrite(9, LOW);
          delay(1000);
        } else {
          digitalWrite(9, LOW);
        }
      }
      }
    }
  

    serial_balanza = "";
    serial_read = "";
}

void command(String estado) {
  Serial.println("DIGITOO: " + String(estado));
  if(estado == "a") {
      Serial.println("YEYYYY");
      digitalWrite(11,LOW);    // Prende Motor 
    }
    if(estado == "b" ) {
      digitalWrite(11,HIGH);     // Apaga Motor
    }
    if(estado == "c") {                    
      digitalWrite(10,LOW);    // Habilita puerta
    }
    if(estado == "d" ) {
      digitalWrite(10,HIGH);     // Desabilita puerta
    }
      if(estado == "e") {                    
      digitalWrite(9,LOW);    // Habilita descarga
    }
    if(estado == "f" ) {
      digitalWrite(9,HIGH);     // Desabilita descarga
    }
}

boolean isNumeric(String str) {
  unsigned int stringLength = str.length();
  if (stringLength == 0) {
    return false;
  }
  boolean seenDecimal = false;
  for(unsigned int i = 0; i < stringLength; ++i) {
    if (isDigit(str.charAt(i)) || str.charAt(i) == '-') {
      continue;
    }
    if (str.charAt(i) == '.') {
      if (seenDecimal) {
        return false;
      }
      seenDecimal = true;
      continue;
    }
    return false;
  }
  return true;
}

Y la falla es? Porque no has puesto en que quieres que te ayudemos.
Obviamente no he visto tu código pq no entiendo que debo mirar o aconsejarte.

De todos modos alguna corrección muy menor.

float final_de_carrera = digitalRead(A0);

si lees datos del AD de ningún modo sera usando un float, usa unsigned int.
Si usas digitalRead para leer un final de carrera te alcanza y sobra con un bool o boolean porque solo recibirás un SI/NO TRUE/FALSE.

bool final_de_carrera = digitalRead(A0);