#pragma once #include "Arduino.h" #include "Wire.h" #define REGISTER_READ_VIN 0x88 #define REGISTER_READ_VSHUNT 0xD1 #define REGISTER_CONFIGURATION 0xD0 #define REGISTER_READ_IIN 0x89 enum AveragingMode { averages_1 = 0b000, averages_4 = 0b001, averages_16 = 0b010, averages_64 = 0b011, averages_128 = 0b100, averages_256 = 0b101, averages_512 = 0b110, averages_1024 = 0b111 }; enum ConversionTime { conversion_time_140uS = 0b000, conversion_time_204uS = 0b001, conversion_time_332us = 0b010, conversion_time_588uS = 0b011, conversion_time_1100uS = 0b100, conversion_time_2116uS = 0b101, conversion_time_4156uS = 0b110, conversion_time_8244uS = 0b111 }; class INA233{ public: String get_device_model(); INA233(uint8_t addr, TwoWire* wire = &Wire); bool begin(const uint8_t sda, const uint8_t scl); float getBusVoltage(void); float getShuntVoltage_mV(void); float getShuntVoltage(void); void setAveragingMode(AveragingMode); void setBusVoltageConversionTime(ConversionTime); void setShuntVoltageConversionTime(ConversionTime); uint16_t getConfigRegister(); void reset(); void setCalibrationRegister(int value); bool isConnected(void); private: float _current_LSB; float _shunt; float _maxCurrent; uint8_t _address; TwoWire * _wire; };