diff options
Diffstat (limited to 'lib/rgb/rgb.cpp')
| -rw-r--r-- | lib/rgb/rgb.cpp | 75 |
1 files changed, 47 insertions, 28 deletions
diff --git a/lib/rgb/rgb.cpp b/lib/rgb/rgb.cpp index a748006..469cf3d 100644 --- a/lib/rgb/rgb.cpp +++ b/lib/rgb/rgb.cpp @@ -7,7 +7,6 @@ int RGB::scaleColor(uint8_t val) return map(val, 0, 255, 0, 1023); } - RGB::RGB() { pinMode(RED_PIN, OUTPUT); @@ -15,53 +14,72 @@ RGB::RGB() pinMode(BLUE_PIN, OUTPUT); } - -void RGB::setColorRGB(uint8_t red, uint8_t green, uint8_t blue) +void RGB::setColorRGB(uint8_t red, uint8_t green, uint8_t blue, bool saveColor = true) { analogWrite(RED_PIN, scaleColor(red)); analogWrite(GREEN_PIN, scaleColor(green)); analogWrite(BLUE_PIN, scaleColor(blue)); + if (saveColor) + { + currentR = red; + currentG = green; + currentB = 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--) + int startR = currentR; + int startG = currentG; + int startB = currentB; + + for (int i = 0; i <= duration; i++) { - setColorRGB(red * i / 255, green * i / 255, blue * i / 255); - delay(duration / 255); - } -} + uint8_t newR = startR + ((red - startR) * i) / duration; + uint8_t newG = startG + ((green - startG) * i) / duration; + uint8_t newB = startB + ((blue - startB) * i) / duration; + setColorRGB(newR, newG, newB, false); + delay(1); + } -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) +void RGB::blink(int cycles, int interval) { - for (int i = 0; i <= 255; i++) + for (int i = 0; i < cycles; i++) { - setColorRGB(red * i / 255, green * i / 255, blue * i / 255); - delay(duration / 255); + setColorRGB(0, 0, 0, false); + delay(interval); + setColorRGB(currentR, currentG, currentB, false); + delay(interval); } - for (int i = 255; i >= 0; i--) +} + +void RGB::breathe(int cycles, int interval) +{ + uint8_t baseR = currentR; + uint8_t baseG = currentG; + uint8_t baseB = currentB; + + for (int c = 0; c < cycles; ++c) { - setColorRGB(red * i / 255, green * i / 255, blue * i / 255); - delay(duration / 255); + for (int i = 0; i <= 255; ++i) + { + setColorRGB(baseR * i / 255, baseG * i / 255, baseB * i / 255, false); + delay(interval / 510); + } + + for (int i = 255; i >= 0; --i) + { + setColorRGB(baseR * i / 255, baseG * i / 255, baseB * i / 255, false); + delay(interval / 510); + } } -} + setColorRGB(baseR, baseG, baseB); +} void RGB::rainbowCycle(int duration) { @@ -73,4 +91,5 @@ void RGB::rainbowCycle(int duration) setColorRGB(red, green, blue); delay(duration / 256); } + setColorRGB(currentR, currentG, currentB, false); } |