Moving Average of MCP3008 (8ch ADC)
Diff: AverageMCP3008.h
- 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