Libary for control.

Dependencies:   FastPWM

Dependents:   RT2_Cuboid

Revision:
8:3a2131231969
Child:
9:9a2672ac2ef4
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/AvgFilter.cpp	Mon Mar 14 16:47:41 2022 +0000
@@ -0,0 +1,46 @@
+#include "AvgFilter.h"
+
+AvgFilter::AvgFilter(uint8_t _N)
+{
+    setup(_N);
+}
+
+AvgFilter::~AvgFilter()
+{
+}
+
+void AvgFilter::setup(uint8_t _N)
+{
+    m_N = _N;
+    m_ring_buffer = (float*)malloc(m_N*sizeof(float));
+    reset();
+}
+
+void AvgFilter::reset()
+{
+    m_avg = 0.0f;
+    m_idx = 0;
+    for(uint8_t i = 0; i < m_N; i++) {
+        m_ring_buffer[i] = 0.0f;
+    }
+}
+
+float AvgFilter::update(float _inp)
+{
+    // remove last value from ringbuffer
+    m_avg -= m_ring_buffer[m_idx];
+
+    // add new value and update ringbuffer, rinbuffer stores the scaled value
+    float scaled_inp = _inp / (float)m_N;
+    m_avg += scaled_inp;
+    m_ring_buffer[m_idx] = scaled_inp;
+
+    // check if we are at the end of the ringbuffer
+    m_idx++;
+    if (m_idx == m_N)
+    {
+        m_idx = 0;
+    }
+
+    return m_avg;
+}
\ No newline at end of file