Merge pull request #450 from keyboardio/ledcontrol/breath-phase-offset

LEDUtils: breath improvements
pull/451/head
Jesse Vincent 6 years ago committed by GitHub
commit 68bb37a697
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -17,13 +17,25 @@
#include "kaleidoscope/plugin/LEDControl/LEDUtils.h"
cRGB
breath_compute(uint8_t hue, uint8_t saturation) {
breath_compute(uint8_t hue, uint8_t saturation, uint8_t phase_offset) {
// This code is adapted from FastLED lib8tion.h as of dd5d96c6b289cb6b4b891748a4aeef3ddceaf0e6
// Eventually, we should consider just using FastLED
// The phase offset is provided in case one wants more than one breathe effect
// differing in phase at the same time. This may be useful for individual
// indicators that need to contrast with any other overall breathe effect.
// (Offset value 128 giving 50% ie opposite phase is especially nice.)
//
// The actual breathe computation function has a period of 4096. The input
// phase offset ranges from 0 to 255. This is to be scaled to the actual
// period 0 to 4096. To allow precise offsets of 25%, 50% etc, and for
// computational convenience and speed (and since one would not meaningfully
// request an offset of 4096 for 255 to be mapped to it), we merely multiply
// the input offset by 16 (== 4096/256), or equivalently lshift it by 4.
// We do a bit shift here instead of division to ensure that there's no discontinuity
// in the output brightness when the integer overflows.
uint8_t i = (uint16_t)millis() >> 4;
uint8_t i = ((uint16_t)Kaleidoscope.millisAtCycleStart() + (phase_offset << 4)) >> 4;
if (i & 0x80) {
i = 255 - i;

@ -18,5 +18,5 @@
#include <Kaleidoscope.h>
cRGB breath_compute(uint8_t hue = 170, uint8_t saturation = 255);
cRGB breath_compute(uint8_t hue = 170, uint8_t saturation = 255, uint8_t phase_offset = 0);
cRGB hsvToRgb(uint16_t h, uint16_t s, uint16_t v);

Loading…
Cancel
Save