Buenas tardes, estoy haciendo un medidor de mAh para baterias de litio 18650, el codigo ya funciona pero no se muestran los datos en el LCD, solo al inicio pero luego de unos segundos la pantalla se vuelve loca, podrian ayudarme a solucionar este error?
este es el codigo:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Crear el objeto lcd con la dirección 0x27 y 16 columnas x 2 filas
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Variables
float capacity_mAh = 0;
float current = 0;
unsigned long previousTime = 0; // Cambiar a unsigned long para millis()
const float R = 7; // Resistencia en ohms
void setup() {
// Inicializar LCD y puerto serial
lcd.init();
lcd.backlight();
Serial.begin(9600);
// Inicializar tiempo
previousTime = millis();
}
void loop() {
// Leer el voltaje de la batería
int sensorValue = analogRead(A0);
float voltage = (sensorValue * 5.0) / 1023.0; // Calcular voltaje de la batería
// Calcular la corriente usando la ley de Ohm
current = voltage / R; // I = V / R
// Tiempo transcurrido desde la última medición en horas
unsigned long currentTime = millis();
float elapsedTime = (currentTime - previousTime) / 3600000.0; // Tiempo en horas
// Acumular capacidad
capacity_mAh += current * elapsedTime * 1000; // Corriente en mAh
// Actualizar el tiempo anterior
previousTime = currentTime;
// Mostrar el voltaje y la capacidad en el LCD
lcd.setCursor(0, 0); // Ajustar a la posición correcta
lcd.print("Voltage: ");
lcd.print(voltage, 2);
lcd.print(" V");
lcd.setCursor(0, 1); // Ajustar a la posición correcta
lcd.print("Cap: ");
lcd.print(capacity_mAh, 2); // Mostrar con 2 decimales
lcd.print(" mAh");
// Verificar si el voltaje está por debajo del corte
if (voltage < 2.6) {
// Detener el programa o realizar otra acción
Serial.print("Capacidad final: ");
Serial.print(capacity_mAh, 2); // Mostrar con 2 decimales
Serial.println(" mAh");
}
// Esperar un tiempo antes de la siguiente lectura
delay(1000); // Actualizar cada segundo
}