Good morning,
I’m trying to know the battery charge level of my Sparkfun thing Plus with its mcp73831 and ap2112k but I can’t get it. Can someone give me a hand? Thank you so much,
#include <Wire.h>
const int mcp73831_address = 0x6B; // Dirección I2C del MCP73831
const int ap2112k_pin = 33; // Pin de salida del AP2112K
void setup() {
Serial.begin(9600);
Wire.begin();
pinMode(ap2112k_pin, INPUT);
}
void loop() {
// Leer el estado de VBUS
bool isUsbConnected = digitalRead(5); // Pin 5 en la SparkFun Thing Plus es la salida VBUS del MCP73831
if (isUsbConnected) {
Serial.println("El sistema está siendo alimentado por USB y la batería no se está cargando.");
} else {
Serial.println("La batería se está cargando o el sistema está siendo alimentado por la batería.");
}
// Leer el nivel de carga de la batería
Wire.beginTransmission(mcp73831_address); // Envía una solicitud de lectura
Wire.write(0x07); // Registra la tensión de la batería
Wire.endTransmission(false); // Termina la transmisión sin liberar el bus I2C
Wire.requestFrom(mcp73831_address, 2); // Solicita 2 bytes de datos
int value = Wire.read() << 8 | Wire.read(); // Combina los dos bytes en un valor entero
float voltage = (value >> 4) * 0.008f; // Calcula el voltaje medido
float batteryPercent = (voltage - 3.0) / (4.2 - 3.0) * 100.0; // Calcula el nivel de carga de la batería en porcentaje
Serial.print("Nivel de batería: ");
Serial.print(batteryPercent);
Serial.println("%");
// Leer el nivel de alimentación del AP2112K
float voltageIn = analogRead(ap2112k_pin) * (3.3 / 4096.0); // Lee el nivel de voltaje en el pin de entrada del AP2112K
Serial.print("Nivel de voltaje de entrada: ");
Serial.print(voltageIn);
Serial.println("V");
delay(1000);
}