Moving Average of MCP3008 (8ch ADC)
AverageMCP3008.h@0:211b1b1254b3, 2017-10-12 (annotated)
- 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?
User | Revision | Line number | New 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_ |