Moving Average of MCP3008 (8ch ADC)

Committer:
ryood
Date:
Thu Oct 12 08:45:37 2017 +0000
Revision:
0:211b1b1254b3
Child:
1:8077de8afeb8
first commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ryood 0:211b1b1254b3 1 #ifndef _AVERAGE_MCP3008_H_
ryood 0:211b1b1254b3 2 #define _AVERAGE_MCP3008_H_
ryood 0:211b1b1254b3 3
ryood 0:211b1b1254b3 4 #include "mbed.h"
ryood 0:211b1b1254b3 5 #include "mcp3008.h"
ryood 0:211b1b1254b3 6
ryood 0:211b1b1254b3 7 class AverageMCP3008 {
ryood 0:211b1b1254b3 8 public:
ryood 0:211b1b1254b3 9 AverageMCP3008(MCP3008* _m_p_mcp3008, int _bufferSize=8) : m_p_mcp3008(_m_p_mcp3008), bufferSize(_bufferSize), index(0) {
ryood 0:211b1b1254b3 10 buffer = new unsigned short[bufferSize];
ryood 0:211b1b1254b3 11 }
ryood 0:211b1b1254b3 12
ryood 0:211b1b1254b3 13 ~AverageMCP3008() {
ryood 0:211b1b1254b3 14 delete[] buffer;
ryood 0:211b1b1254b3 15 }
ryood 0:211b1b1254b3 16
ryood 0:211b1b1254b3 17 unsigned short read_input_u16(int channel) {
ryood 0:211b1b1254b3 18 buffer[index] = m_p_mcp3008->read_input_u16(channel);
ryood 0:211b1b1254b3 19 index++;
ryood 0:211b1b1254b3 20 if (index == bufferSize) {
ryood 0:211b1b1254b3 21 index = 0;
ryood 0:211b1b1254b3 22 }
ryood 0:211b1b1254b3 23 unsigned int sum = 0;
ryood 0:211b1b1254b3 24 for (int i = 0; i < bufferSize; i++) {
ryood 0:211b1b1254b3 25 sum += buffer[i];
ryood 0:211b1b1254b3 26 }
ryood 0:211b1b1254b3 27 return sum / bufferSize;
ryood 0:211b1b1254b3 28 }
ryood 0:211b1b1254b3 29
ryood 0:211b1b1254b3 30 float read_input(int channel) {
ryood 0:211b1b1254b3 31 unsigned short value = read_input_u16(channel);
ryood 0:211b1b1254b3 32 return (float)value * (1.0f / (float)0xFFFF);
ryood 0:211b1b1254b3 33 }
ryood 0:211b1b1254b3 34
ryood 0:211b1b1254b3 35 private:
ryood 0:211b1b1254b3 36 MCP3008* m_p_mcp3008;
ryood 0:211b1b1254b3 37 int bufferSize;
ryood 0:211b1b1254b3 38 int index;
ryood 0:211b1b1254b3 39 unsigned short *buffer;
ryood 0:211b1b1254b3 40 };
ryood 0:211b1b1254b3 41
ryood 0:211b1b1254b3 42 #endif //_AVERAGE_MCP3008_H_