const int pot1 = 25; // Pin para el primer potenciómetro
const int pot2 = 26; // Pin para el segundo potenciómetro
// Variable para almacenar el número de horas transcurridas
volatile int interruptCounter;
float t, t2 = 0.0;
float volt = 0.0;
float corriente = 0.0;
float aux1 = 0.0;
// Potencia del dispositivo en vatios
//#define POTENCIA 100
float potencia = 0.0;
float consumo = 0.0;
bool cont_bandera = true;
hw_timer_t * timer = NULL;
portMUX_TYPE timerMux = portMUX_INITIALIZER_UNLOCKED;
// Función de interrupción del temporizador
void IRAM_ATTR onTimer() {
portENTER_CRITICAL_ISR(&timerMux);
if (cont_bandera) {
interruptCounter++;
}
portEXIT_CRITICAL_ISR(&timerMux);
}
unsigned long startMillis = 0;
unsigned long endMillis = 0;
unsigned long elapsedMillis = 0 ;
void setup() {
Serial.begin(115200);
// Configurar el temporizador
timer = timerBegin(0, 80, true);
// Adjuntar la función de interrupción al temporizador
timerAttachInterrupt(timer, &onTimer, true);
// Configurar la frecuencia del temporizador (1 hora)
//timerAlarmWrite(timer, 3600000000, true);
timerAlarmWrite(timer, 1000000, true);
// Iniciar el temporizador
timerAlarmEnable(timer);
endMillis = millis();
}
void loop() {
startMillis = millis(); // Guarda el tiempo actual
/*printLocalTime();
delay(250);
*/
//volt = analogRead(pot1);
volt = map(analogRead(pot1), 0.0, 4095.0, 0.0, 230.0);
//corriente = analogRead(pot2);
corriente = map(analogRead(pot2), 0.0, 4095.0, 0.0, 30.0);
potencia = volt * corriente ;
if (interruptCounter > 3600) {
// Reset the counter
interruptCounter = 0;
Serial.println("¡Ha pasado una hora!");
}
//endMillis = millis(); // Guarda el tiempo actual
//elapsedMillis = millis()-endMillis; // Calcula el tiempo transcurrido
if (corriente < 10 ) {
// Detener el contador
cont_bandera = false;
Serial.println("El contador se ha detenido");
}
else {
// Reanudar el contador
cont_bandera = true;
Serial.println("El contador se ha reanudado");
t = interruptCounter / 3600.0;
//t = interruptCounter;
//t2 = t - t2;
//Serial.println(t,2);
//Serial.println(t2,2);
//if (interruptCounter > 1) {
//consumo = consumo + ( potencia * (elapsedMillis / 3600.0) ) / 1000.0;
consumo = consumo + potencia * (millis()-endMillis / 3600000000.0);
consumo = consumo / 1000.0;
//}
//consumo = ( potencia * t ) / 1000.0;
//consumo += (potencia * t) / 1000.0;
//consumo += consumo;
}
//aux1 = corriente ;
// Medir el tiempo de uso en horas (h)
//t = interruptCounter / 3600.0;
//consumo = ( potencia * t ) / 1000.0;
//float consumo = (POTENCIA * t) / 1000.0;
// Imprimir el consumo de energía
Serial.print("Horas de Consumo: ");
Serial.print(interruptCounter);
Serial.println(" h");
Serial.print("voltaje: ");
Serial.print(volt);
Serial.println(" V");
Serial.print("Corriente: ");
Serial.print(corriente);
Serial.println(" A");
Serial.print("Consumo de energía: ");
Serial.print(consumo, 8);
Serial.println(" kWh");
Serial.print(startMillis, 1);
Serial.println(" seg");
Serial.print(endMillis, 1);
Serial.println(" seg");
Serial.print(elapsedMillis, 1);
Serial.println(" seg");
endMillis = millis();
//delay(3000);
}