Example for Lib Pulses. Measurement of power and energy with a energy meter which has a S0 interface

Dependencies:   Pulses mbed

Measurement of low frequencys based on timing between pulses. Example for using a energy meter with S0 interface.

Revision:
1:0f8dd2deb61b
Parent:
0:010c6e517e18
Child:
2:4805e84fa084
--- a/main.cpp	Wed Nov 07 18:48:55 2012 +0000
+++ b/main.cpp	Thu Nov 08 07:25:51 2012 +0000
@@ -1,22 +1,33 @@
 #include "mbed.h"
 #include "Pulses.h"
 
-//DigitalOut myled(LED1);
+Serial pc(USBTX, USBRX); // tx, rx
+
+// Example for energy meter with SO interface
+// SO output of energy meter is connected (over opto-coppler) to pin 8
+
+#define SO_PULSES 2000 // SO interface of energy meter with 2000 pulses per kWh
 Pulses pulses(p8, Pulses::FALL);
-Serial pc(USBTX, USBRX); // tx, rx
 
 int main() {
-    // choose on of the following unit scales
-    pulses.setFactor(1.0f);   // Hz
-    pulses.setFactor(60.0f);   // rpm
-    pulses.setFactor(3600.0f/2000.0f);   // kWh; energy meter with SO interface - 2000 pulses per kWh
+    pulses.setFactor(3600.0f/SO_PULSES);   // Scale to kW; kWh
+
+    float averagePower = 0;    // Average energy since last call of get()
+    float minPower = 0;        // Min. energy since last call of get()
+    float maxPower = 0;        // Max. energy since last call of get()
+    float sumEnergy = 0;       // Sum of energy over all since start of mbed
     
     while(1) {
-        pc.printf ( "Pulses: counter=%d act=%.3f average=%.3f\r\n", 
-            pulses.getCounter(), 
-            pulses.getAct(), 
-            pulses.getAverage() );
+        
+        pulses.get ( &averagePower, &minPower, &maxPower, &sumEnergy );
         
-        wait(3.14);
+        pc.printf ( "Power: %d (%.3f...%.3f) [kW]   Energy: %.3f [kWh]   SO-pulses=%d\r\n", 
+            averagePower, 
+            minPower, 
+            maxPower, 
+            sumEnergy,
+            pulses.getCounter() );
+        
+        wait(6);   // Example 6 seconds; typical 1 minute (60 sec)
     }
 }