В дополнение к maheenul, я хотел бы добавить, что ваши расчеты немного не верны.
const float mvpc = 4.55 ; //measured voltage of arduino through voltmeter
Полагаю, вы поставляете Arduino через USB. Это напряжение не очень надежно.
float counts = 0; //battery volts in millivolts
counts = analogRead(cellPin);
analogRead возвращает 10-битное (0-1023) чтение АЦП. Фракция вашего опорного напряжения. Это не значение в милливольтах! Таким образом, в следующем примере вы должны использовать 1024 вместо 1000.
output = (mv * multiplier)/1000 ;
charge = (counts/1024)*100;
, это вычисляет процент вашего Vref. Это не заряд, как объяснил maheenul.
Если вы хотите точных измерений, вы должны использовать лучший Vref. Либо внутренний 1.1Vref, либо какой-то хорошо регулируемый Vref. Оба с соответствующими делителями напряжения.
Но я думаю, что скидка 5-10% не имеет большого значения для измерения заряда батареи.