Compare commits

..

5 Commits

Author SHA1 Message Date
4260fdf0bb add interface 2022-01-04 10:25:41 +01:00
b03ad5dbb5 change logging 2022-01-03 17:14:00 +01:00
bc76604d68 Add logging 2021-12-14 19:20:34 +01:00
672e44a7cb Add gitignore 2021-12-14 19:19:43 +01:00
ec06e9e4a8 added constructor 2021-12-14 18:54:30 +01:00
3 changed files with 85 additions and 17 deletions

32
.gitignore vendored Normal file
View File

@@ -0,0 +1,32 @@
.DS_Store
.pio
.vscode
# kicad Temporary files
*.000
*.bak
*.bck
*.kicad_pcb-bak
*.kicad_sch-bak
*.kicad_prl
*.sch-bak
*~
_autosave-*
*.tmp
*-save.pro
*-save.kicad_pcb
fp-info-cache
# Netlist files (exported from Eeschema)
*.net
# Autorouter files (exported from Pcbnew)
*.dsn
*.ses
# Exported BOM files
*.xml
*.csv
# other files
CAD/Leo_muziekdoos_ESP32/~$ESP32 Pins.xlsx

View File

@@ -3,8 +3,8 @@
Copyright (c) 2014 Roberto Lo Giacco. Copyright (c) 2014 Roberto Lo Giacco.
This program is free software: you can redistribute it and/or modify This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as it under the terms of the GNU Lesser General Public License as
published by the Free Software Foundation, either version 3 of the published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version. License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, This program is distributed in the hope that it will be useful,
@@ -19,25 +19,37 @@
#include "Battery.h" #include "Battery.h"
#include <Arduino.h> #include <Arduino.h>
Battery::Battery(uint16_t minVoltage, uint16_t maxVoltage, uint8_t sensePin) { Battery::Battery(uint16_t minVoltage, uint16_t maxVoltage, uint8_t sensePin)
{
this->sensePin = sensePin; this->sensePin = sensePin;
this->activationPin = 0xFF; this->activationPin = 0xFF;
this->minVoltage = minVoltage; this->minVoltage = minVoltage;
this->maxVoltage = maxVoltage; this->maxVoltage = maxVoltage;
readFunction = &analogRead;
} }
void Battery::begin(uint16_t refVoltage, float dividerRatio, mapFn_t mapFunction) { Battery::Battery(uint16_t minVoltage, uint16_t maxVoltage, uint8_t sensePin, readFn_t readfunc)
{
Battery(minVoltage, maxVoltage, sensePin);
readFunction = readfunc;
}
void Battery::begin(uint16_t refVoltage, float dividerRatio, mapFn_t mapFunction)
{
this->refVoltage = refVoltage; this->refVoltage = refVoltage;
this->dividerRatio = dividerRatio; this->dividerRatio = dividerRatio;
pinMode(this->sensePin, INPUT); pinMode(this->sensePin, INPUT);
if (this->activationPin < 0xFF) { if (this->activationPin < 0xFF)
{
pinMode(this->activationPin, OUTPUT); pinMode(this->activationPin, OUTPUT);
} }
this->mapFunction = mapFunction ? mapFunction : &linear; this->mapFunction = mapFunction ? mapFunction : &linear;
} }
void Battery::onDemand(uint8_t activationPin, uint8_t activationMode) { void Battery::onDemand(uint8_t activationPin, uint8_t activationMode)
if (activationPin < 0xFF) { {
if (activationPin < 0xFF)
{
this->activationPin = activationPin; this->activationPin = activationPin;
this->activationMode = activationMode; this->activationMode = activationMode;
pinMode(this->activationPin, OUTPUT); pinMode(this->activationPin, OUTPUT);
@@ -45,30 +57,49 @@ void Battery::onDemand(uint8_t activationPin, uint8_t activationMode) {
} }
} }
uint8_t Battery::level() { uint8_t Battery::level()
{
return this->level(this->voltage()); return this->level(this->voltage());
} }
uint8_t Battery::level(uint16_t voltage) { uint8_t Battery::level(uint16_t voltage)
if (voltage <= minVoltage) { {
if (voltage <= minVoltage)
{
return 0; return 0;
} else if (voltage >= maxVoltage) { }
else if (voltage >= maxVoltage)
{
return 100; return 100;
} else { }
else
{
return (*mapFunction)(voltage, minVoltage, maxVoltage); return (*mapFunction)(voltage, minVoltage, maxVoltage);
} }
} }
uint16_t Battery::voltage() { uint16_t Battery::voltage(uint16_t rawMiliVolts)
if (activationPin != 0xFF) { {
return rawMiliVolts * dividerRatio;
}
uint16_t Battery::voltage()
{
if (activationPin != 0xFF)
{
digitalWrite(activationPin, activationMode); digitalWrite(activationPin, activationMode);
log_v("activationPin on");
delayMicroseconds(10); // copes with slow switching activation circuits delayMicroseconds(10); // copes with slow switching activation circuits
} }
analogRead(sensePin); readFunction(sensePin);
delay(2); // allow the ADC to stabilize delay(2); // allow the ADC to stabilize
uint16_t reading = analogRead(sensePin) * dividerRatio * refVoltage / 1024; uint16_t reading = readFunction(sensePin) * dividerRatio * refVoltage / 1024;
if (activationPin != 0xFF) { if (activationPin != 0xFF)
{
digitalWrite(activationPin, !activationMode); digitalWrite(activationPin, !activationMode);
log_v("activationPin off");
} }
log_v("BatteryRead: %d", reading);
return reading; return reading;
} }

View File

@@ -22,6 +22,8 @@
#include <Arduino.h> #include <Arduino.h>
typedef uint8_t(*mapFn_t)(uint16_t, uint16_t, uint16_t); typedef uint8_t(*mapFn_t)(uint16_t, uint16_t, uint16_t);
typedef uint16_t (*readFn_t)(uint8_t); // type for conciseness
class Battery { class Battery {
public: public:
@@ -35,6 +37,7 @@ class Battery {
*/ */
Battery(uint16_t minVoltage, uint16_t maxVoltage, uint8_t sensePin); Battery(uint16_t minVoltage, uint16_t maxVoltage, uint8_t sensePin);
Battery(uint16_t minVoltage, uint16_t maxVoltage, uint8_t sensePin, readFn_t readfunc);
/** /**
* Initializes the library by optionally setting additional parameters. * Initializes the library by optionally setting additional parameters.
* To obtain the best results use a calibrated reference using the VoltageReference library or equivalent. * To obtain the best results use a calibrated reference using the VoltageReference library or equivalent.
@@ -71,6 +74,7 @@ class Battery {
* Returns the current battery voltage in millivolts. * Returns the current battery voltage in millivolts.
*/ */
uint16_t voltage(); uint16_t voltage();
uint16_t voltage(uint16_t rawMilliVolts);
private: private:
uint16_t refVoltage; uint16_t refVoltage;
@@ -81,6 +85,7 @@ class Battery {
uint8_t activationPin; uint8_t activationPin;
uint8_t activationMode; uint8_t activationMode;
mapFn_t mapFunction; mapFn_t mapFunction;
readFn_t readFunction;
}; };
// //