A library for interfacing the ACS712 Hall Effect Current Sensor module with a microcontroller
Diff: ACS712.cpp
- Revision:
- 0:c0c26e03d080
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/ACS712.cpp Thu Oct 10 11:04:18 2019 +0000
@@ -0,0 +1,92 @@
+#include "ACS712.h"
+#include "mbed.h"
+
+// Constructor/Destructor
+ACS712::ACS712(PinName const outpin)
+
+ :
+
+ _aInPin(new AnalogIn(outpin))
+
+{}
+
+ACS712::~ACS712()
+{
+ delete _aInPin;
+}
+
+// ----- Public Methods -----
+
+void ACS712::init()
+{
+
+}
+double ACS712::read_current_sensor()
+{
+ double val;
+ val = _aInPin->read();
+ val *= val;
+ val = sqrt(val);
+ return val;
+}
+
+int ACS712::read_ain_uint_16()
+{
+ int val = 0;
+
+ val = _aInPin->read_u16();
+
+ return val;
+}
+
+void ACS712::convert_to_amps(float acs_offset, float gain, int type)
+{
+
+ double _current_in = read_current_sensor()*3.3;
+
+ switch(type) {
+
+ case 5:
+ _current = (acs_offset*gain - _current_in*gain)/.185*gain;
+ break;
+ case 20:
+ _current = (acs_offset*gain - _current_in*gain)/.100*gain;
+ break;
+ case 30:
+ _current = (_current_in*gain - acs_offset*gain)/.066*gain;
+ break;
+ default:
+ _current = 999.9;
+ break;
+
+ }
+
+}
+
+
+bool ACS712::over_current_detection(double operating_current)
+{
+
+ bool current_spike_flag = false;
+
+ if(_current > (1.1*operating_current)) {
+
+ current_spike_flag = true;
+
+ }
+ else {
+
+ current_spike_flag = false;
+
+ }
+
+ return current_spike_flag;
+
+}
+
+float ACS712::get_current_amps()
+{
+
+ return _current;
+
+}