/* ----------------------------------------- Part of the openenergymonitor.org project Licence: GNU GPL V3 */ #include "EmonLib.h" // Include Emon Library EnergyMonitor ct1; // Create an instance int count = 0; float meassurements[20]; float maximum = 0; float minimum = 0; float average_addition = 0; void setup() { Serial.begin(9600); ct1.voltageTX(216.58, 1.7); // Calibration, phase_shift ct1.currentTX(1, 111.1); // CT channel, calibration. delay(50); } void loop() { ct1.calcVI(20,2000); // Calculate all. No.of half wavelengths (crossings), time-out Serial.print(ct1.realPower); Serial.println(' '); meassurements[count] = ct1.realPower; count++; delay(50); if (count == 20){ maximum = minimum = meassurements[0]; average_addition = 0; for (int i=0; i<20; i++){ if (meassurements[i] < minimum) minimum = meassurements[i]; if (meassurements[i] > maximum) maximum = meassurements[i]; average_addition += meassurements[i]; } float average = average_addition / 20; float nominador = 0; for(int i =0; i <20; i++){ nominador += pow ((meassurements[i] - average),2); } float standard_deviation; standard_deviation = sqrt(nominador/20); Serial.println("Max Min Average Standard-deviation"); Serial.print(maximum); Serial.print(' '); Serial.print(minimum); Serial.print(' '); Serial.print(average); Serial.print(' '); Serial.print(standard_deviation); Serial.println(' '); Serial.println(' '); count = 0; delay(10000); } }