Moving Average of MCP3008 (8ch ADC)

AverageMCP3008.h

Committer:
ryood
Date:
2017-10-12
Revision:
0:211b1b1254b3
Child:
1:8077de8afeb8

File content as of revision 0:211b1b1254b3:

#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_