Moving Average of MCP3008 (8ch ADC)

Revision:
0:211b1b1254b3
Child:
1:8077de8afeb8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/AverageMCP3008.h	Thu Oct 12 08:45:37 2017 +0000
@@ -0,0 +1,42 @@
+#ifndef _AVERAGE_MCP3008_H_
+#define _AVERAGE_MCP3008_H_
+ 
+#include "mbed.h"
+#include "mcp3008.h"
+ 
+class AverageMCP3008 {
+public:
+    AverageMCP3008(MCP3008* _m_p_mcp3008, int _bufferSize=8) : m_p_mcp3008(_m_p_mcp3008), bufferSize(_bufferSize), index(0) {
+        buffer = new unsigned short[bufferSize];
+    }
+    
+    ~AverageMCP3008() {
+        delete[] buffer;
+    }
+    
+    unsigned short read_input_u16(int channel) {
+        buffer[index] = m_p_mcp3008->read_input_u16(channel);
+        index++;
+        if (index == bufferSize) {
+            index = 0;
+        }
+        unsigned int sum = 0;
+        for (int i = 0; i < bufferSize; i++) {
+            sum += buffer[i];
+        }
+        return sum / bufferSize;
+    }
+    
+    float read_input(int channel) {
+        unsigned short value = read_input_u16(channel);
+        return (float)value * (1.0f / (float)0xFFFF);
+    }
+ 
+private:
+    MCP3008* m_p_mcp3008;
+    int bufferSize;
+    int index;
+    unsigned short *buffer;
+};
+ 
+#endif //_AVERAGE_MCP3008_H_
\ No newline at end of file