/* AnalogReadSerial Reads an analog input on pin 0, prints the result to the serial monitor This example code is in the public domain. */ const int gndRefPin=0; const int currentSensor1Pin=1; const int voltageSensorPin=2; double epsilon=0.004; class SensorStats { public: SensorStats() : last(0),now(0),delta(0),delsq(0),mean(0) { }; int last; int now; double delta; double delsq; double mean; void record(const int reading) { last = now; now = reading; mean = mean*(-epsilon+1.0)+epsilon*now; // Mean value of current sensor //meanDiff = meanDiff*(-epsilon+1.0)+epsilon*abs(now-gnd); delta=(delta+double(now-last))*(-epsilon+1.0); // Current value of current over mean dc component delsq = (mean-double(now))*(mean-double(now))*epsilon + delsq*(-epsilon+1.0); } }; SensorStats s1; SensorStats v; void setup() { Serial.begin(9600); } void loop() { int gnd = analogRead(gndRefPin); for (int i=0; i<100; ++i) { v .record(analogRead(voltageSensorPin)); s1.record(analogRead(currentSensor1Pin)); } Serial.print(v.now); Serial.print("\t"); Serial.print(v.mean); Serial.print("\t"); Serial.print(v.delta); Serial.print("\t"); Serial.print(sqrt(v.delsq)); Serial.print("\tXX\t"); Serial.print(s1.now); Serial.print("\t"); Serial.print(s1.mean); Serial.print("\t"); Serial.print(s1.delta); Serial.print("\t"); Serial.print(sqrt(s1.delsq)); Serial.print("\t"); //Serial.print(meanDiff); Serial.println(""); }