From ae3029ace336a5e28cffc7a9ce113ed3e8faa95d Mon Sep 17 00:00:00 2001
From: DV <you@example.com>
Date: Sun, 26 Feb 2017 23:08:12 +0100
Subject: [PATCH] Updated documentation

---
 NodeManagerTemplate/README.md | 114 ++++++++++++++++++++++++++++++++--
 1 file changed, 110 insertions(+), 4 deletions(-)

diff --git a/NodeManagerTemplate/README.md b/NodeManagerTemplate/README.md
index 7949e33..ae3b27f 100644
--- a/NodeManagerTemplate/README.md
+++ b/NodeManagerTemplate/README.md
@@ -1,4 +1,4 @@
-NodeManager
+Welcome to NodeManager (v1.1)
 
 # Introduction
 
@@ -66,7 +66,6 @@ Those NodeManager's directives in the `config.h` file control which module/libra
 // if enabled, a battery sensor will be created at BATTERY_CHILD_ID and will report vcc voltage together with the battery level percentage
 #define BATTERY_SENSOR 1
 
-
 // Enable this module to use one of the following sensors: SENSOR_ANALOG_INPUT, SENSOR_LDR, SENSOR_THERMISTOR
 #define MODULE_ANALOG_INPUT 1
 // Enable this module to use one of the following sensors: SENSOR_DIGITAL_INPUT
@@ -90,6 +89,8 @@ Node Manager comes with a reasonable default configuration. If you want/need to
 ~~~c
     // the pin to connect to the RST pin to reboot the board (default: 4)
     void setRebootPin(int value);
+    // send the same service message multiple times (default: 1)
+    void setRetries(int value);
     #if BATTERY_MANAGER == 1
       // the expected vcc when the batter is fully discharged, used to calculate the percentage (default: 2.7)
       void setBatteryMin(float value);
@@ -111,6 +112,8 @@ Node Manager comes with a reasonable default configuration. If you want/need to
     #endif
     // configure the interrupt pin and mode. Mode can be CHANGE, RISING, FALLING (default: MODE_NOT_DEFINED)
     void setInterrupt(int pin, int mode, int pull = -1);
+    // optionally sleep interval in milliseconds before sending each message to the radio network (default: 0)
+    void setSleepBetweenSend(int value);
     // register a built-in sensor
     int registerSensor(int sensor_type, int pin = -1, int child_id = -1);
     // register a custom sensor
@@ -119,8 +122,12 @@ Node Manager comes with a reasonable default configuration. If you want/need to
     Sensor* get(int sensor_index);
     #if POWER_MANAGER == 1
       // to save battery the sensor can be optionally connected to two pins which will act as vcc and ground and activated on demand
-      void setPowerPins(int ground_pin, int vcc_pin, long wait = 10);
+      void setPowerPins(int ground_pin, int vcc_pin, long wait = 0);
+      // if enabled the pins will be automatically powered on while awake and off during sleeping (default: true)
+      void setAutoPowerPins(bool value);
+      // manually turn the power on
       void powerOn();
+      // manually turn the power off
       void powerOff();
     #endif
 ~~~
@@ -214,10 +221,16 @@ The following methods are available for all the sensors:
     void setValueType(int value);
 // for float values, set the float precision (default: 2)
     void setFloatPrecision(int value);
+    // optionally sleep interval in milliseconds before sending each message to the radio network (default: 0)
+    void setSleepBetweenSend(int value);
     #if POWER_MANAGER == 1
       // to save battery the sensor can be optionally connected to two pins which will act as vcc and ground and activated on demand
       void setPowerPins(int ground_pin, int vcc_pin, long wait = 0);
+      // if enabled the pins will be automatically powered on while awake and off during sleeping (default: true)
+      void setAutoPowerPins(bool value);
+      // manually turn the power on
       void powerOn();
+      // manually turn the power off
       void powerOff();
     #endif
 ~~~
@@ -361,4 +374,97 @@ A NodeManager object must be created and called from within your sketch during `
 * If the destination child id is the configuration node, it will handle the incoming message, otherwise will dispatch the message to the recipient sensor
 
 ### Sensor::receive()
-* Invoke `Sensor::loop()` which will execute the sensor main taks and eventually call `Sensor::onReceive()`
\ No newline at end of file
+* Invoke `Sensor::loop()` which will execute the sensor main taks and eventually call `Sensor::onReceive()`
+
+# Examples
+Enable reboot pin, connect pin 4 to RST to enable rebooting the board with the REBOOT message:
+
+~~~c
+void before() {
+  nodeManager.setRebootPin(4);
+  nodeManager.before();
+}
+~~~
+
+Set battery minimum and maxium voltage. This will be used to calculate the level percentage:
+
+~~~c
+void before() {
+    nodeManager.setBatteryMin(1.8);
+    nodeManager.setBatteryMin(3.2);
+    nodeManager.before();
+}
+~~~
+
+Instruct the board to sleep for 10 minutes at each cycle:
+
+~~~c
+void before() {
+    nodeManager.setSleep(SLEEP,10,MINUTES);
+    nodeManager.before();
+}
+~~~
+
+Configure a wake up pin. When pin 3 is connected to ground, the board will stop sleeping:
+
+~~~c
+void before() {
+    nodeManager.setSleepInterruptPin(3);
+    nodeManager.before();
+}
+~~~
+
+Use the arduino pins to power on and off the attached sensors. All the sensors' vcc and ground are connected to pin 6 (ground) and 7 (vcc). NodeManager will enable the vcc pin every time just before loop() and wait for 100ms for the power to settle before running loop() of each sensor:
+
+~~~c
+void before() {
+   nodeManager.setPowerPins(6,7,100);
+    nodeManager.before();
+}
+~~~
+
+Register a thermistor sensor attached to pin A2. NodeManager will then send the temperature to the controller at the end of each sleeping cycle:
+
+~~~c
+void before() {
+   nodeManager.registerSensor(SENSOR_THERMISTOR,A2);
+    nodeManager.before();
+}
+~~~
+
+Register a LDR sensor attached to pin A1 and send to the gateway the average of 3 samples:
+
+~~~c
+void before() {
+  int sensor_ldr = nodeManager.registerSensor(SENSOR_LDR,A1);
+  ((SensorLDR*)nodeManager.get(sensor_ldr))->setSamples(3);
+    nodeManager.before();
+}
+~~~
+
+Register a rain sensor connected to A0. This will be powered with via pins 4 (ground) and 5 (vcc) just before reading its value at each cycle, it will be presented as S_RAIN. sending V_RAINRATE messages, the output will be a percentage (calculated between 200 and 2014) and the value will be reversed (so that no rain will be 0%):
+
+~~~c
+void before() {
+  int rain = nodeManager.registerSensor(SENSOR_ANALOG_INPUT,A0);
+  SensorAnalogInput* rainSensor = ((SensorAnalogInput*)nodeManager.get(rain));
+  rainSensor->setPowerPins(4,5,300);
+  rainSensor->setPresentation(S_RAIN);
+  rainSensor->setType(V_RAINRATE);
+  rainSensor->setOutputPercentage(true);
+  rainSensor->setRangeMin(200);
+  rainSensor->setRangeMax(1024);
+  rainSensor->setReverse(true);
+    nodeManager.before();
+}
+~~~
+
+Register a latching relay connecting to pin 6 (set) and pin 7 (unset):
+
+~~~c
+void before() {
+  nodeManager.registerSensor(SENSOR_LATCHING_RELAY,6);
+  nodeManager.registerSensor(SENSOR_LATCHING_RELAY,7);
+  nodeManager.before();
+}
+~~~
\ No newline at end of file
-- 
GitLab