Skip to content

Commit

Permalink
use map define that will work with floats
Browse files Browse the repository at this point in the history
  • Loading branch information
sctanf committed Feb 19, 2024
1 parent 626498c commit 1d324a4
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 13 deletions.
26 changes: 13 additions & 13 deletions src/batterymonitor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -105,37 +105,37 @@ void BatteryMonitor::Loop()
// Estimate battery level, 3.2V is 0%, 3.87V is 50%, 4.15V is 100% (1.0)
// Mapped from battery discharge with buck regulating to 2.8V
if (voltage > 4.075)
level = map(voltage, 4.075, 4.15, 0.95, 1);
level = MAP(voltage, 4.075, 4.15, 0.95, 1);
else if (voltage > 3.775)
level = map(voltage, 3.775, 4.075, 0.3, 0.95);
level = MAP(voltage, 3.775, 4.075, 0.3, 0.95);
else if (voltage > 3.45)
level = map(voltage, 3.45, 3.775, 0.05, 0.3);
level = MAP(voltage, 3.45, 3.775, 0.05, 0.3);
else
level = map(voltage, 3.2, 3.45, 0, 0.05);
level = MAP(voltage, 3.2, 3.45, 0, 0.05);
#elif BATTERY_REGULATOR == REG_LDO
// Estimate battery level, 3.2V is 0%, 3.77V is 50%, 4.15V is 100% (1.0)
// Mapped from battery discharge with ldo
if (voltage > 4.025)
level = map(voltage, 4.025, 4.15, 0.95, 1);
level = MAP(voltage, 4.025, 4.15, 0.95, 1);
else if (voltage > 3.65)
level = map(voltage, 3.65, 4.025, 0.3, 0.95);
level = MAP(voltage, 3.65, 4.025, 0.3, 0.95);
else if (voltage > 3.4)
level = map(voltage, 3.4, 3.65, 0.05, 0.3);
level = MAP(voltage, 3.4, 3.65, 0.05, 0.3);
else
level = map(voltage, 3.2, 3.4, 0, 0.05);
level = MAP(voltage, 3.2, 3.4, 0, 0.05);
#elif BATTERY_REGULATOR == REG_LEGACY
// Estimate battery level, 3.2V is 0%, 3.7V is 50%, 4.17V is 100% (1.0)
// Mapped from unknown data?
if (voltage > 3.975)
level = map(voltage, 3.975, 4.17, 0.84375, 1);
level = MAP(voltage, 3.975, 4.17, 0.84375, 1);
else if (voltage > 3.677)
level = map(voltage, 3.677, 3.975, 0.4709, 0.84375);
level = MAP(voltage, 3.677, 3.975, 0.4709, 0.84375);
else if (voltage > 3.489)
level = map(voltage, 3.489, 3.677, 0.1512, 0.4709);
level = MAP(voltage, 3.489, 3.677, 0.1512, 0.4709);
else if (voltage > 3.36)
level = map(voltage, 3.36, 3.489, 0.048, 0.1512);
level = MAP(voltage, 3.36, 3.489, 0.048, 0.1512);
else
level = map(voltage, 3.2, 3.36, 0, 0.048);
level = MAP(voltage, 3.2, 3.36, 0, 0.048);
level = (level - 0.05f) / 0.95f; // Cut off the last 5% (3.36V)
#endif

Expand Down
2 changes: 2 additions & 0 deletions src/batterymonitor.h
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,8 @@
#define ADCMultiplier 3.3 / 1023.0 * 14.2 / 9.1
#endif

#define MAP(x, in_min, in_max, out_min, out_max) ((x - in_min) / (in_max - in_min) * (out_max - out_min) + out_min)

class BatteryMonitor
{
public:
Expand Down

0 comments on commit 1d324a4

Please sign in to comment.