const int inputPin = 4; // Pino de entrada do ESP32
volatile int pulseCount = 0;
unsigned long previousMillis = 0;
const unsigned long interval = 1000; // Intervalo de 1 segundo
const float pulses_per_liter = 98.0; // Número de pulsos por litro
// Variável para acumular o volume total
float totalVolumeLiters = 0.0;
void IRAM_ATTR countPulses() {
pulseCount++;
}
void setup() {
Serial.begin(115200);
pinMode(inputPin, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(inputPin), countPulses, FALLING);
}
void loop() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
// Calcular o volume em litros baseado no número de pulsos recebidos desde a última atualização
float volumeLiters = pulseCount / pulses_per_liter;
// Atualizar o volume total
totalVolumeLiters += volumeLiters;
// Calcular o volume em mililitros
float totalVolumeMilliliters = totalVolumeLiters * 1000.0;
// Exibir o volume total
Serial.print("Volume total passado: ");
Serial.print(totalVolumeMilliliters);
Serial.println(" ml");
// Resetar a contagem de pulsos para a próxima atualização
pulseCount = 0;
}
}