diff --git a/doc/plugin/LEDEffect-Breathe.md b/doc/plugin/LEDEffect-Breathe.md new file mode 100644 index 00000000..72a2c346 --- /dev/null +++ b/doc/plugin/LEDEffect-Breathe.md @@ -0,0 +1,39 @@ +# Kaleidoscope-LEDEffect-Breathe + +Provides a breathing effect for the keyboard. Breathe in, breathe out. + +## Using the extension + +To use the plugin, include the header, and tell the firmware to use it: + +```c++ +#include +#include + +KALEIDOSCOPE_INIT_PLUGINS(LEDControl, + LEDBreatheEffect); + +void setup() { + Kaleidoscope.setup(); +} +``` + +## Plugin properties + +The plugin provides the `LEDBreatheEffect` object, which has a single property: + +### `.hue` + +> The hue of the breathe effect. +> +> Defaults to 170, a blue hue. + +### `.saturation` + +> The color saturation of the breathe effect. +> +> Defaults to 255, the maximum. + +## Dependencies + +* [Kaleidoscope-LEDControl](LEDControl.md) diff --git a/src/Kaleidoscope-LEDEffect-Breathe.h b/src/Kaleidoscope-LEDEffect-Breathe.h new file mode 100644 index 00000000..028e40d3 --- /dev/null +++ b/src/Kaleidoscope-LEDEffect-Breathe.h @@ -0,0 +1,19 @@ +/* Kaleidoscope-LEDEffect-Breathe - A breathing effect on the LEDs, for Kaleidoscope. + * Copyright (C) 2017-2018 Keyboard.io, Inc. + * + * This program is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by the Free Software + * Foundation, version 3. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License along with + * this program. If not, see . + */ + +#pragma once + +#include "kaleidoscope/plugin/LEDEffect-Breathe.h" diff --git a/src/kaleidoscope/plugin/LEDEffect-Breathe.cpp b/src/kaleidoscope/plugin/LEDEffect-Breathe.cpp new file mode 100644 index 00000000..ba77c1f9 --- /dev/null +++ b/src/kaleidoscope/plugin/LEDEffect-Breathe.cpp @@ -0,0 +1,35 @@ +/* Kaleidoscope-LEDEffect-Breathe - A breathing effect on the LEDs, for Kaleidoscope. + * Copyright (C) 2017-2018 Keyboard.io, Inc. + * + * This program is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by the Free Software + * Foundation, version 3. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License along with + * this program. If not, see . + */ + +#include "Kaleidoscope-LEDEffect-Breathe.h" + +#define UPDATE_INTERVAL 50 // milliseconds between two LED updates to avoid overloading; 20 fps + +namespace kaleidoscope { +namespace plugin { +void LEDBreatheEffect::update(void) { + uint16_t now = Kaleidoscope.millisAtCycleStart(); + if ((now - last_update_) < UPDATE_INTERVAL) + return; + last_update_ = now; + + cRGB color = breath_compute(hue, saturation); + ::LEDControl.set_all_leds_to(color); +} +} +} + +kaleidoscope::plugin::LEDBreatheEffect LEDBreatheEffect; diff --git a/src/kaleidoscope/plugin/LEDEffect-Breathe.h b/src/kaleidoscope/plugin/LEDEffect-Breathe.h new file mode 100644 index 00000000..ade1e7dc --- /dev/null +++ b/src/kaleidoscope/plugin/LEDEffect-Breathe.h @@ -0,0 +1,39 @@ +/* Kaleidoscope-LEDEffect-Breathe - A breathing effect on the LEDs, for Kaleidoscope. + * Copyright (C) 2017-2018 Keyboard.io, Inc. + * + * This program is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by the Free Software + * Foundation, version 3. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License along with + * this program. If not, see . + */ + +#pragma once + +#include "Kaleidoscope-LEDControl.h" + +namespace kaleidoscope { +namespace plugin { +class LEDBreatheEffect : public LEDMode { + public: + LEDBreatheEffect(void) {} + + uint8_t hue = 170; + uint8_t saturation = 255; + + protected: + void update(void) final; + + private: + uint16_t last_update_ = 0; +}; +} +} + +extern kaleidoscope::plugin::LEDBreatheEffect LEDBreatheEffect;