GY-63_MS5611/libraries/MAX471_RT/MAX471.cpp
2024-01-30 20:00:57 +01:00

105 lines
1.7 KiB
C++

//
// FILE: MAX471.cpp
// AUTHOR: Rob Tillaart
// VERSION: 0.1.0
// DATE: 2024-01-30
// PURPOSE: Arduino library for MAX471 current sensor.
// URL: https://github.com/RobTillaart/MAX471_RT
#include "MAX471.h"
/////////////////////////////////////////////////////////////////////////////
//
// CONSTRUCTOR
//
MAX471::MAX471(uint8_t currentPin, uint8_t voltagePin)
{
_currentPin = currentPin;
_voltagePin = voltagePin;
_signPin = 255;
_current = 0;
_voltage = 0;
}
MAX471::MAX471(uint8_t currentPin, uint8_t voltagePin, uint8_t signPin)
{
_currentPin = currentPin;
_voltagePin = voltagePin;
_signPin = signPin;
_current = 0;
_voltage = 0;
pinMode(_signPin, INPUT_PULLUP);
}
void MAX471::begin(float maxVoltage, uint16_t maxSteps)
{
_units = maxVoltage / maxSteps;
}
float MAX471::readCurrent(uint8_t times)
{
if (times == 0) times = 1;
uint8_t _times = times;
float sum = 0;
while (_times--)
{
sum += analogRead(_currentPin) ;
}
_current = sum * _units / times;
if (_signPin != 255)
{
if (digitalRead(_signPin) == HIGH)
{
_current *= -1;
}
}
return _current;
}
float MAX471::readCurrentMilliAmpere(uint8_t times)
{
return readCurrent(times) * 1000;
}
float MAX471::readVoltage(uint8_t times)
{
if (times == 0) times = 1;
uint8_t _times = times;
float sum = 0;
while (_times--)
{
sum += analogRead(_voltagePin);
}
_voltage = sum * _units / times;
return _voltage;
}
float MAX471::readVoltageMilliVolts(uint8_t times)
{
return readVoltage(times) * 1000;
}
float MAX471::calcPower()
{
return _current * _voltage;
}
float MAX471::calcPowerMilliWatt()
{
return _current * _voltage * 1000;
}
// -- END OF FILE --