From 5d07dbb73d5b0a34a0b54bcc2d25c5cc704bce76 Mon Sep 17 00:00:00 2001
From: Juergen Jung <github@der-onkel.net>
Date: Sun, 19 Feb 2017 21:43:23 +0100
Subject: [PATCH] Add documentation

---
 Readme.md                             | 80 +++++++++++++++++++++++++++
 esp-wemos-schild/NeoPatterns.cpp      |  7 +++
 esp-wemos-schild/NeoPatterns.h        |  3 +
 esp-wemos-schild/esp-wemos-schild.ino | 14 ++---
 4 files changed, 96 insertions(+), 8 deletions(-)
 create mode 100644 Readme.md

diff --git a/Readme.md b/Readme.md
new file mode 100644
index 0000000..4e5823d
--- /dev/null
+++ b/Readme.md
@@ -0,0 +1,80 @@
+Homie Schild Firmware
+=====================
+## About
+## Features
+|Topic    |Descriptions  |settable   |Values   |
+|---------|--------------|:---------:|---------|
+|`device_id`/strip/pixel/|Range property from 0 - (number of pixels - 1)|ja|Color as uint32_t see [Color](#color)|
+|`device_id`/strip/color|Range property to set the effects colors 1 & 2 see: [effect colors](#effect-colors)|ja|Color as uint32_t see [Color](#color)|
+|`device_id`/strip/brightness|Sets the brightness of the pixel strip|ja|possible values: 0 - 255|
+|`device_id`/strip/effect|Set effect|ja|see: [effects](#effects)|
+|`device_id`/strip/clear|Clears the pixels strip|ja|any value is possible|
+|`device_id`/strip/length|Set the strip length|ja|Possible values: 0 - length|
+
+## Color
+To convert RGB value use the following bash code:
+```bash
+function rgbToColor {   
+  echo $(( $(($1<<16)) + $(($2<<8)) + $(($3))  ));
+}
+
+function colorToRGB {
+  echo "Red:    $(($1>>16&0xff))"
+  echo "Green:  $(($1>>8&0xff))"
+  echo "Blue:   $(($1&0xff))"
+}
+```
+#### Example
+RGB Value to color uint32_t
+```bash
+  bash$ rgbToColor 155 230 32
+  10216992
+  bash$
+```
+uint32_t to RGB values
+```bash
+  bash$ colorToRGB 10216992
+  Red:    155
+  Green:  230
+  Blue:   32
+  bash$
+```
+
+## Effects
+* scanner
+Shows the moving larson scanner eye known form *Battlestar Galactica* and *Knight Rider*. The used effect color can be specified by *color_0*
+* randomscanner
+This is the same scanner then the scanner above but uses an alternating color pattern
+* rainbowcycle
+Shows a cycling rainbown on the LED strip
+* theaterchase
+Shows an color chasing LED strip.
+You can specify the color by set *color_0* and *color_1*  
+* fade
+Fades from effect color_0 to effect_color_1
+* randomfade
+Fades thru an alternating color pattern
+* none
+Stop all effects
+
+## Effect colors
+You can set to different effect colors
+* *color_0* (default R: 255, G: 0  B: 0)
+* *color_1* (default R: 0, G: 0  B: 255)
+
+The effect color has to be set after the effect.
+###### Example:
+1. `homie/device_id/strip/effect/set -m "fade"`
+2. `homie/device_id/strip/color_0/set -m "255"`
+3. `homie/device_id/strip/color_1/set -m "10216992"`
+
+##### color_0
+This color will be used for the following effects:
+* scanner
+* theaterchase
+* fade
+
+##### color_1
+This color will be used for the following effects:
+* theaterchase
+* fade
diff --git a/esp-wemos-schild/NeoPatterns.cpp b/esp-wemos-schild/NeoPatterns.cpp
index e51e81a..91cea44 100644
--- a/esp-wemos-schild/NeoPatterns.cpp
+++ b/esp-wemos-schild/NeoPatterns.cpp
@@ -228,6 +228,13 @@ void NeoPatterns::RandomFadeUpdate(){
         Increment();
 }
 
+void NeoPatterns::SetColor1(uint32_t color){
+        Color1 = color;
+}
+void NeoPatterns::SetColor2(uint32_t color){
+        Color2 = color;
+}
+
 // Calculate 50% dimmed version of a color (used by ScannerUpdate)
 uint32_t NeoPatterns::DimColor(uint32_t color)
 {
diff --git a/esp-wemos-schild/NeoPatterns.h b/esp-wemos-schild/NeoPatterns.h
index 7168fed..68e470b 100644
--- a/esp-wemos-schild/NeoPatterns.h
+++ b/esp-wemos-schild/NeoPatterns.h
@@ -26,6 +26,9 @@ void Fade(uint32_t color1, uint32_t color2, uint16_t steps, uint8_t interval, di
 void FadeUpdate();
 void RandomFade(uint8_t interval = 100);
 void RandomFadeUpdate();
+
+void SetColor1(uint32_t color);
+void SetColor2(uint32_t color);
 //Utilities
 void ColorSet(uint32_t color);
 uint8_t Red(uint32_t color);
diff --git a/esp-wemos-schild/esp-wemos-schild.ino b/esp-wemos-schild/esp-wemos-schild.ino
index 5790312..3d8ff89 100644
--- a/esp-wemos-schild/esp-wemos-schild.ino
+++ b/esp-wemos-schild/esp-wemos-schild.ino
@@ -23,8 +23,6 @@ HomieNode stripNode("strip", "strip");
 HomieNode sensorNode("sensor", "sensor");
 Bounce debouncer = Bounce();
 
-uint32_t color1 = pixels.Color(255, 0, 0);
-uint32_t color2 = pixels.Color(0, 0, 255);
 
 bool onSetColor(const HomieRange& range, const String& value){
         if (!range.isRange || range.index < 0 || range.index > 1) {
@@ -32,10 +30,10 @@ bool onSetColor(const HomieRange& range, const String& value){
         }
         switch(range.index) {
         case 0:
-                color1 = value.toInt();
+                pixels.SetColor1(value.toInt());
                 break;
         case 1:
-                color2 = value.toInt();
+                pixels.SetColor2(value.toInt());
                 break;
         }
         stripNode.setProperty("color_" + String(range.index)).send(value);
@@ -74,19 +72,19 @@ bool onSetEffect(const HomieRange& range, const String& value){
         String effect = value;
         effect.toLowerCase();
         if(effect == "scanner") {
-                pixels.Scanner(color1);
+                pixels.Scanner(pixels.Color(255, 0, 0));
         }
         else if(effect == "randomscanner") {
-                pixels.Scanner(color1, 40, true);
+                pixels.Scanner(pixels.Color(255, 0, 0), 40, true);
         }
         else if(effect == "rainbowcycle") {
                 pixels.RainbowCycle(50);
         }
         else if(effect == "theaterchase") {
-                pixels.TheaterChase(color1, color2, 100);
+                pixels.TheaterChase(pixels.Color(255, 0, 0), pixels.Color(0,0,255), 100);
         }
         else if(effect == "fade") {
-                pixels.Fade(color1, color2, 200, 100);
+                pixels.Fade(pixels.Color(255, 0, 0), pixels.Color(0,0,255), 200, 100);
         }
         else if(effect == "randomfade") {
                 pixels.RandomFade();