Moving Average Analog In

Dependents:   BSM02

Committer:
ryood
Date:
Tue Jun 21 05:19:31 2016 +0000
Revision:
0:abe0f7520f24
Moving Average Analog In;

Who changed what in which revision?

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