]> git.donarmstrong.com Git - qmk_firmware.git/commitdiff
Address #1689 by using a formula to define the breathing curve (#1692)
authorskullydazed <skullydazed@users.noreply.github.com>
Tue, 17 Oct 2017 23:47:49 +0000 (16:47 -0700)
committerGitHub <noreply@github.com>
Tue, 17 Oct 2017 23:47:49 +0000 (16:47 -0700)
* Address #1689 by using a formula to define the breathing curve and exposing defines to control the shape of the curve.

* Tweak the behavior of breathing for clueboard

docs/feature_rgblight.md
keyboards/clueboard_66/rev2/config.h
keyboards/clueboard_66/rev3/config.h
quantum/rgblight.c
quantum/rgblight.h

index 4ee32f3ec24167275035c82d22e1575769f9f129..c65a499fbe25b51e771534a4ad80a053ea75de1e 100644 (file)
@@ -49,8 +49,10 @@ If you have `#define RGBLIGHT_ANIMATIONS` in your `config.h` you will have a num
 | Option | Default Value | Description |
 |--------|---------------|-------------|
 | `RGBLIGHT_ANIMATIONS` | | `#define` this to enable animation modes. |
-| `RGBLIGHT_EFFECT_SNAKE_LENGTH` | 4 | The number of LEDs to light up for the "snake" mode. |
-| `RGBLIGHT_EFFECT_KNIGHT_LENGTH` | 3 | The number of LEDs to light up for the "knight" mode. |
+| `RGBLIGHT_EFFECT_BREATHE_CENTER | 1.85 | Used to calculate the curve for the breathing animation. Valid values 1.0-2.7. |
+| `RGBLIGHT_EFFECT_BREATHE_MAX | 255 | The maximum brightness for the breathing mode. Valid values 1-255. |
+| `RGBLIGHT_EFFECT_SNAKE_LENGTH` | 4 | The number of LEDs to light up for the "snake" animation. |
+| `RGBLIGHT_EFFECT_KNIGHT_LENGTH` | 3 | The number of LEDs to light up for the "knight" animation. |
 | `RGBLIGHT_EFFECT_KNIGHT_OFFSET` | 0 | Start the knight animation this many LEDs from the start of the strip. |
 | `RGBLIGHT_EFFECT_KNIGHT_LED_NUM` | RGBLED_NUM | The number of LEDs to have the "knight" animation travel. |
 | `RGBLIGHT_EFFECT_CHRISTMAS_INTERVAL` | 1000 | How long to wait between light changes for the "christmas" animation. Specified in ms. |
index 3c22c5b4a6bc8ed709e96a3a63fc31f4b6aa2367..3c96f79870ea096f5f4c04df79b2251948555fc4 100644 (file)
@@ -36,6 +36,8 @@
 #define RGBLIGHT_VAL_STEP 17
 
 #define RGBLIGHT_ANIMATIONS
+#define RGBLIGHT_EFFECT_BREATHE_CENTER 1
+#define RGBLIGHT_EFFECT_BREATHE_MAX 200
 #define RGBLIGHT_EFFECT_CHRISTMAS_INTERVAL 666*2
 #define RGBLIGHT_EFFECT_CHRISTMAS_STEP 1
 #define RGBLIGHT_EFFECT_KNIGHT_LENGTH 3   // How many LEDs wide to light up
index 5e645c78f0766d086bcf82d2f090731a67e395f8..513dc11696d72b40e2a4bdb4cdb857481c8e4053 100644 (file)
@@ -36,6 +36,8 @@
 #define RGBLIGHT_VAL_STEP 17
 
 #define RGBLIGHT_ANIMATIONS
+#define RGBLIGHT_EFFECT_BREATHE_CENTER 1
+#define RGBLIGHT_EFFECT_BREATHE_MAX 200
 #define RGBLIGHT_EFFECT_CHRISTMAS_INTERVAL 666*2
 #define RGBLIGHT_EFFECT_CHRISTMAS_STEP 1
 #define RGBLIGHT_EFFECT_KNIGHT_LENGTH 3   // How many LEDs wide to light up
index 0f02b9a64c7b84662caf6970d266c673008ae033..78072a61dedc593dbf3cdbe8c1b30653ec07f342 100644 (file)
@@ -13,6 +13,7 @@
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
+#include <math.h>
 #include <avr/eeprom.h>
 #include <avr/interrupt.h>
 #include <util/delay.h>
@@ -465,13 +466,17 @@ void rgblight_task(void) {
 void rgblight_effect_breathing(uint8_t interval) {
   static uint8_t pos = 0;
   static uint16_t last_timer = 0;
+  float val;
 
   if (timer_elapsed(last_timer) < pgm_read_byte(&RGBLED_BREATHING_INTERVALS[interval])) {
     return;
   }
   last_timer = timer_read();
 
-  rgblight_sethsv_noeeprom(rgblight_config.hue, rgblight_config.sat, pgm_read_byte(&LED_BREATHING_TABLE[pos]));
+
+  // http://sean.voisen.org/blog/2011/10/breathing-led-with-arduino/
+  val = (exp(sin((pos/255.0)*M_PI)) - RGBLIGHT_EFFECT_BREATHE_CENTER/M_E)*(RGBLIGHT_EFFECT_BREATHE_MAX/(M_E-1/M_E));
+  rgblight_sethsv_noeeprom(rgblight_config.hue, rgblight_config.sat, val);
   pos = (pos + 1) % 256;
 }
 void rgblight_effect_rainbow_mood(uint8_t interval) {
index c1b3378b33524811febc05699b839e92cd7f9fcc..fb79ce6ded231bb3c4a95f5419cd056b8703267e 100644 (file)
        #define RGBLIGHT_MODES 1
 #endif
 
+#ifndef RGBLIGHT_EFFECT_BREATHE_CENTER
+#define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85  // 1-2.7
+#endif
+
+#ifndef RGBLIGHT_EFFECT_BREATHE_MAX
+#define RGBLIGHT_EFFECT_BREATHE_MAX 255   // 0-255
+#endif
+
 #ifndef RGBLIGHT_EFFECT_SNAKE_LENGTH
 #define RGBLIGHT_EFFECT_SNAKE_LENGTH 4
 #endif