1818#define WipperSnapper_I2C_Driver_INA237_H
1919
2020#include " WipperSnapper_I2C_Driver.h"
21- #include < Adafruit_INA237.h>
21+ #include " Wippersnapper.h"
22+
23+ // Forward declaration
24+ class Adafruit_INA237 ;
2225
2326/* *************************************************************************/
2427/* !
@@ -36,46 +39,22 @@ class WipperSnapper_I2C_Driver_INA237 : public WipperSnapper_I2C_Driver {
3639 The 7-bit I2C address of the sensor.
3740 */
3841 /* ******************************************************************************/
39- WipperSnapper_I2C_Driver_INA237 (TwoWire *i2c, uint16_t sensorAddress)
40- : WipperSnapper_I2C_Driver(i2c, sensorAddress) {
41- _i2c = i2c;
42- _sensorAddress = sensorAddress;
43- }
42+ WipperSnapper_I2C_Driver_INA237 (TwoWire *i2c, uint16_t sensorAddress);
4443
4544 /* ******************************************************************************/
4645 /* !
4746 @brief Destructor for an INA237 sensor.
4847 */
4948 /* ******************************************************************************/
50- ~WipperSnapper_I2C_Driver_INA237 () { delete _ina237; }
49+ ~WipperSnapper_I2C_Driver_INA237 ();
5150
5251 /* ******************************************************************************/
5352 /* !
5453 @brief Initializes the INA237 sensor and begins I2C.
5554 @returns True if initialized successfully, False otherwise.
5655 */
5756 /* ******************************************************************************/
58- bool begin () {
59- _ina237 = new Adafruit_INA237 ();
60- if (!_ina237->begin (_sensorAddress, _i2c)) {
61- WS_DEBUG_PRINTLN (" INA237 failed to initialise!" );
62- return false ;
63- }
64-
65- // Configuration based on INA237 example sketch
66- // Set default shunt resistance and maximum current
67- // Default 0.015 ohm shunt, 10A max current
68- _ina237->setShunt (0.015 , 10.0 );
69-
70- // Set averaging for better accuracy (16 samples)
71- _ina237->setAveragingCount (INA2XX_COUNT_16);
72-
73- // Set conversion times as per example
74- _ina237->setVoltageConversionTime (INA2XX_TIME_150_us);
75- _ina237->setCurrentConversionTime (INA2XX_TIME_280_us);
76-
77- return true ;
78- }
57+ bool begin ();
7958
8059 /* ******************************************************************************/
8160 /* !
@@ -87,10 +66,7 @@ class WipperSnapper_I2C_Driver_INA237 : public WipperSnapper_I2C_Driver {
8766 otherwise.
8867 */
8968 /* ******************************************************************************/
90- bool getEventVoltage (sensors_event_t *voltageEvent) {
91- voltageEvent->voltage = _ina237->getBusVoltage_V ();
92- return true ;
93- }
69+ bool getEventVoltage (sensors_event_t *voltageEvent);
9470
9571 /* *
9672 * @brief Get the current sensor event.
@@ -100,10 +76,7 @@ class WipperSnapper_I2C_Driver_INA237 : public WipperSnapper_I2C_Driver {
10076 * @returns True if the sensor event was obtained successfully, False
10177 * otherwise.
10278 */
103- bool getEventCurrent (sensors_event_t *currentEvent) {
104- currentEvent->current = _ina237->getCurrent_mA ();
105- return true ;
106- }
79+ bool getEventCurrent (sensors_event_t *currentEvent);
10780
10881 /* *
10982 * @brief Get the raw (power) sensor event.
@@ -113,13 +86,10 @@ class WipperSnapper_I2C_Driver_INA237 : public WipperSnapper_I2C_Driver {
11386 * @returns True if the sensor event was obtained successfully, False
11487 * otherwise.
11588 */
116- bool getEventRaw (sensors_event_t *powerEvent) {
117- powerEvent->data [0 ] = _ina237->getPower_mW ();
118- return true ;
119- }
89+ bool getEventRaw (sensors_event_t *powerEvent);
12090
12191protected:
122- Adafruit_INA237 *_ina237 = nullptr ; // /< Pointer to INA237 sensor object
92+ Adafruit_INA237 *_ina237; // /< Pointer to INA237 sensor object
12393};
12494
12595#endif // WipperSnapper_I2C_Driver_INA237
0 commit comments