float distance;
float volume;
// Prototipos de funciones
void init_ultrasonic_sensor();
void calculate_volume();
void app_main()
{
init_ultrasonic_sensor();
while (1) {
calculate_volume();
printf("Volumen de agua: %.2f litros\n", volume);
vTaskDelay(1000 / portTICK_PERIOD_MS); // Espera 1 segundo antes de calcular nuevamente el volumen
}
}
void init_ultrasonic_sensor()
{
// Configurar pines como entradas/salidas GPIO y modo INPUT/OUTPUT respectivamente.
gpio_set_direction(TRIGGER_PIN, GPIO_MODE_OUTPUT);
gpio_set_direction(ECHO_PIN, GPIO_MODE_INPUT);
}
void calculate_volume()
{
// Enviar un pulso ultrasonido para activar el sensor y medir la distancia.
gpio_set_level(TRIGGER_PIN, 1);
esp_timer_delay_us(10);
gpio_set_level(TRIGGER_PIN, 0);
// Esperar hasta que la señal del pin ECHO sea alta.
while(gpio_get_level(ECHO_PIN) == 0)
{
;
}
uint64_t start_time = esp_timer_get_time();
// Esperar hasta que la señal del pin ECHO sea baja.
while(gpio_get_level(ECHO_PIN) == 1)
{
;
}
uint64_t end_time = esp_timer_get_time();
distance = (end_time - start_time) * 0.034 / 2; // Calcular la distancia en centímetros
// Calcular el volumen de agua en litros (para un contenedor cilíndrico)
float radius = 10.0; // Radio del contenedor en cm
float height = 30.0; // Altura del contenedor en cm
volume = 3.14159265359 * radius * radius * distance / height;
}