diff options
Diffstat (limited to 'lib/rgb/rgb.cpp')
| -rw-r--r-- | lib/rgb/rgb.cpp | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/lib/rgb/rgb.cpp b/lib/rgb/rgb.cpp new file mode 100644 index 0000000..a748006 --- /dev/null +++ b/lib/rgb/rgb.cpp @@ -0,0 +1,76 @@ +#include <Arduino.h> +#include "settings.h" +#include "rgb.h" + +int RGB::scaleColor(uint8_t val) +{ + return map(val, 0, 255, 0, 1023); +} + + +RGB::RGB() +{ + pinMode(RED_PIN, OUTPUT); + pinMode(GREEN_PIN, OUTPUT); + pinMode(BLUE_PIN, OUTPUT); +} + + +void RGB::setColorRGB(uint8_t red, uint8_t green, uint8_t blue) +{ + analogWrite(RED_PIN, scaleColor(red)); + analogWrite(GREEN_PIN, scaleColor(green)); + analogWrite(BLUE_PIN, scaleColor(blue)); +} + + +void RGB::fadeColor(uint8_t red, uint8_t green, uint8_t blue, int duration) +{ + for (int i = 0; i <= 255; i++) + { + setColorRGB(red * i / 255, green * i / 255, blue * i / 255); + delay(duration / 255); + } + for (int i = 255; i >= 0; i--) + { + setColorRGB(red * i / 255, green * i / 255, blue * i / 255); + delay(duration / 255); + } +} + + +void RGB::blinkColor(uint8_t red, uint8_t green, uint8_t blue, int duration) +{ + setColorRGB(red, green, blue); + delay(duration); + setColorRGB(0, 0, 0); + delay(duration); +} + + +void RGB::breatheColor(uint8_t red, uint8_t green, uint8_t blue, int duration) +{ + for (int i = 0; i <= 255; i++) + { + setColorRGB(red * i / 255, green * i / 255, blue * i / 255); + delay(duration / 255); + } + for (int i = 255; i >= 0; i--) + { + setColorRGB(red * i / 255, green * i / 255, blue * i / 255); + delay(duration / 255); + } +} + + +void RGB::rainbowCycle(int duration) +{ + for (int i = 0; i < 256; i++) + { + int red = sin(i * 0.024) * 127 + 128; + int green = sin(i * 0.024 + 2) * 127 + 128; + int blue = sin(i * 0.024 + 4) * 127 + 128; + setColorRGB(red, green, blue); + delay(duration / 256); + } +} |