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 ![]()
#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);
}
}

