Estoy terminando de hacer una carga electrónica constante para probar fuentes y baterías.
En el "Modo baterías" se setean 2 parámetros (El voltaje de protección y los mA. que se le va a exigir a la batería durante todo el proceso de descarga).
Cuando creía haber terminado, me di cuenta que algo le faltaba.
La cuenta de mAh. se obtiene de los mA. constantes * el tiempo transcurrido, hasta ahí ningún problema.
Pero si durante el proceso de descarga modifico los mA de consumo (por ejemplo lo pongo a 0mA) los mAh horas obviamente pasan a a ser 0, y no almacena lo que ya se consumió.
Mi problema es que no se como hacer para que los mAh ya consumidos queden almacenados.
Probé sumándolos a la misma variable, pero la cuenta no es correcta.
No se si me explico bien, les dejo la parte del código que describo anteriormente.
#include <Time.h>
#include <TimeLib.h>
byte horas;
byte minutos;
byte segundos;
float mah=0.00;
float time=0.00;
float capacidad=0.00;
float v_cutoff=0.00;
char dec_t[7]; // 00:00:00 HH:MM:SS.
bool flag_cutoff=true;
unsigned long t_refresh=0;
void current_capacity()
{
time= (hour()*3600) + (minute()*60) + (second()); // Convierto la el tiempo en segundos para sumarlo
time= time/3600; // lo vuelvo a convertir a horas.
mah = time*(amps*1000); // Capacidad = tiempo transcurrido * I.
}
void start_discharge()
{
current_capacity();
if (millis()-t_refresh>1000)
{
u8g2.firstPage();
do {
u8g2.setFont(u8g2_font_helvB08_tf);
u8g2.drawBox(0, 0, 132, 11);
u8g2.drawStr(9,22, "V:");
u8g2.drawStr(0,32, "mA:");
u8g2.setCursor(21, 32);
u8g2.print(amps * 1000);
u8g2.setCursor(84, 32);
if (digitalRead(mosfet)==HIGH)
{
sprintf(dec_t, "%02d:%02d:%02d", hour(), minute(), second());
u8g2.print(dec_t);
u8g2.setDrawColor(0);
u8g2.drawStr(35,9, "mAh:");
u8g2.setCursor(62,9);
u8g2.print(mah);
u8g2.setCursor(21, 22);
u8g2.setDrawColor(1);
u8g2.print(volt);
}
else
{
sprintf(dec_t, "%02d:%02d:%02d", horas, minutos, segundos);
u8g2.print(dec_t);
u8g2.setDrawColor(0);
u8g2.drawStr(35,9, "mAh:");
u8g2.setCursor(62,9);
u8g2.print(capacidad);
u8g2.setCursor(21, 22);
u8g2.setDrawColor(1);
u8g2.print(v_cutoff);
u8g2.setFont(u8g2_font_unifont_t_symbols);
u8g2.setDrawColor(0);
u8g2.drawGlyph(110, 10, 10004);
}
u8g2.setFont(u8g2_font_unifont_t_symbols);
u8g2.setDrawColor(1);
u8g2.drawGlyph(66, 32, 9201);
} while ( u8g2.nextPage() );
t_refresh=millis();
}
if ((volt <= v_protec_bat) && (flag_cutoff==true))
{
digitalWrite(mosfet, LOW);
horas = hour();
minutos = minute();
segundos = second();
capacidad = mah;
v_cutoff = volt;
flag_cutoff=false;
}
}
