diff options
| author | EnricoGuccii <partyka.003@gmail.com> | 2025-05-07 22:37:36 +0200 |
|---|---|---|
| committer | EnricoGuccii <partyka.003@gmail.com> | 2025-05-07 22:37:36 +0200 |
| commit | 203a18c1582ecae90468d6527c311c82d4e0c1c6 (patch) | |
| tree | edc8825dca245c721bf62ecc1f14b9e148081a12 /lib/rgb | |
| parent | fe73dbbf9b6864c2064ec8d002a8a1212fafb54a (diff) | |
better RGB
Diffstat (limited to 'lib/rgb')
| -rw-r--r-- | lib/rgb/rgb.cpp | 75 | ||||
| -rw-r--r-- | lib/rgb/rgb.h | 11 |
2 files changed, 54 insertions, 32 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); } diff --git a/lib/rgb/rgb.h b/lib/rgb/rgb.h index 562e9dd..2f50088 100644 --- a/lib/rgb/rgb.h +++ b/lib/rgb/rgb.h @@ -6,14 +6,17 @@ class RGB { public: + uint8_t currentR; + uint8_t currentG; + uint8_t currentB; + RGB(); - void setColorRGB(uint8_t red, uint8_t green, uint8_t blue); + void setColorRGB(uint8_t red, uint8_t green, uint8_t blue, bool saveColor); void fadeColor(uint8_t red, uint8_t green, uint8_t blue, int duration); - void blinkColor(uint8_t red, uint8_t green, uint8_t blue, int duration); - void breatheColor(uint8_t red, uint8_t green, uint8_t blue, int duration); + void blink(int cycles, int interval); + void breathe(int duration, int interval); void rainbowCycle(int duration); private: int scaleColor(uint8_t val); }; - |