Valores positivos en una sola transferencia

Tengo que calcular el volumen de un tanque con base en forma de cono truncado, pero me pidieron que el arduino arroje 3 valores: Vol del Cono, Vol del Cilindro y Vol Total. Lo hice con unos IF y funciona perfecto, el detalle es que son 3 transferencias y el profesor solo quiere 1 donde vengan los 3.

Mi problema es, que de la manera que lo hice los volumenes en determinado momento pueden arrojar valores negativos. Esto lo solucione con los "ifs" pero no se como hacer para que salgan en una sola transferencia o para que los calculos no arrojen valores negativos.

Les dejo el codigo, espero me puedan ayudar :frowning:

#include "SR04.h"
#include "math.h"

#define TRIG_PIN 5
#define ECHO_PIN 4 

SR04 sr04 = SR04(ECHO_PIN,TRIG_PIN);
long dist;
int hMax = 130;
float seno1 = sin(18.6495*PI/180);
float seno2 = sin(71.3505*PI/180);
float vol1;
float vol2;
float vol2Max = 41846.112; 
float vol1Max = 254469.6;
float volTotalMax = 296315.712;
int volMin = 0;
int r2 = 3;
int r1;
int h2 = 40;
int h1 = 90;
int H = 130;


void setup() {
   Serial.begin(9600);
   delay(1000);
}

void loop() {
   dist=sr04.Distance();
   Serial.println(dist);
   delay(500);

   //Calculos
   vol1 = (PI*(30*30))*(h1-dist);
   vol2 = ((PI*(H-dist))/3)*((r1*r1)+(r2*r2)+(r1*r2));
   r1 = ((((H-dist)*(seno1))/seno2)*2)+3;

   //Volumen en Litros del Cilindro
   if (dist < h1){
    Serial.print("Volumen en Litros del Cilindro: ");
    Serial.print(vol1/1000);
    Serial.println(" L");
    delay(500);
   } else {
    Serial.print("Volumen en Litros del Cilindro: ");
    Serial.print(volMin);
    Serial.println(" L");
    delay(500);
   }

      //Volumen en Litros del Cono Truncado
   if (dist >= h1 and dist < H){
    Serial.print("Volumen en Litros del Cono Truncado: ");
    Serial.print(vol2/1000);
    Serial.println(" L");
    delay(500);
   } else if (dist >= 130) {
    Serial.print("Volumen en Litros del Cono Truncado: ");
    Serial.print(volMin);
    Serial.println(" L");
    delay(500);
   } else {
    Serial.print("Volumen en Litros del Cono Truncado: ");
    Serial.print(vol2Max);
    Serial.println(" L");
    delay(500);
   }

   //Volumen Total
   if (dist <= h1){
    Serial.print("El Volumen Total es: ");
    Serial.print((vol1 + vol2Max)/1000);
    Serial.println(" L");
    delay(500);
   } else if (dist >= h1 and dist < H){
    Serial.print("El Volumen Total es: ");
    Serial.print(vol2/1000);
    Serial.println(" L");
    delay(500);
   } else {
    Serial.print("El Volumen Total es: ");
    Serial.print(volMin);
    Serial.println(" L");
    delay(500);
   }
}

Moderador:
Por favor, lee las Normas del foro y edita tu código usando etiquetas de código.
Ve a edición, luego selecciona todo el error que has publicado, lo cortas y click en </>



Disculpa pero para mi es una mal explicación.
Tu tienes todos los datos. Poco te hubiera costado tomar una imagen y postearla para nosotros tuvieramos el mismo grado de comprensión que tu tienes. Se entiende finalmente donde estan h2, h1 y H.
Como esta dispuesto el tanque, aunque dices que invertido con base cono truncado. Igualmente no entiendo lo que haces al comienzo con Volumen en Litros del Cilindro.
Si es < h1 tienes el cilindro y sino el cono truncado.
Algo simil a este
image
Entonces separas en 3 casos

  1. sensor < h1
  2. h1>= sensor < H
  3. sensor >= H

Agrupa bajo estas 3 categorias todo