Kris Scholte Lubberink
/
SSS_Ble
Ble for smart sOlutions
source/MyStripSingleton.cpp@11:d6ed1437c2ee, 2019-06-20 (annotated)
- Committer:
- kris@kris-X682X
- Date:
- Thu Jun 20 13:20:24 2019 +0200
- Revision:
- 11:d6ed1437c2ee
- Parent:
- 10:d845189d146e
Refactored
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kris@kris-X682X | 10:d845189d146e | 1 | // |
kris@kris-X682X | 10:d845189d146e | 2 | // Created by kris on 13-6-19. |
kris@kris-X682X | 10:d845189d146e | 3 | // |
kris@kris-X682X | 10:d845189d146e | 4 | #include "MyStripSingleton.h" |
kris@kris-X682X | 10:d845189d146e | 5 | // strip(), |
kris@kris-X682X | 10:d845189d146e | 6 | |
kris@kris-X682X | 10:d845189d146e | 7 | MyStripSingleton::MyStripSingleton() : strip(Adafruit_WS2801(STRIP_LENGTH, DATA_PIN,CLOCK_PIN, WS2801_RGB)) { |
kris@kris-X682X | 10:d845189d146e | 8 | //TODO: Make the strip |
kris@kris-X682X | 10:d845189d146e | 9 | ambientColor = 0x00ff00; |
kris@kris-X682X | 10:d845189d146e | 10 | strip.begin(); |
kris@kris-X682X | 10:d845189d146e | 11 | strip.show(); |
kris@kris-X682X | 10:d845189d146e | 12 | } |
kris@kris-X682X | 10:d845189d146e | 13 | uint32_t MyStripSingleton::Color(uint8_t r, uint8_t g, uint8_t b) |
kris@kris-X682X | 10:d845189d146e | 14 | { |
kris@kris-X682X | 10:d845189d146e | 15 | uint32_t c; |
kris@kris-X682X | 10:d845189d146e | 16 | c = r; |
kris@kris-X682X | 10:d845189d146e | 17 | c <<= 8; |
kris@kris-X682X | 10:d845189d146e | 18 | c |= g; |
kris@kris-X682X | 10:d845189d146e | 19 | c <<= 8; |
kris@kris-X682X | 10:d845189d146e | 20 | c |= b; |
kris@kris-X682X | 10:d845189d146e | 21 | return c; |
kris@kris-X682X | 10:d845189d146e | 22 | } |
kris@kris-X682X | 10:d845189d146e | 23 | |
kris@kris-X682X | 10:d845189d146e | 24 | uint32_t MyStripSingleton::Wheel(uint8_t WheelPos) |
kris@kris-X682X | 10:d845189d146e | 25 | { |
kris@kris-X682X | 10:d845189d146e | 26 | if (WheelPos < 85) { |
kris@kris-X682X | 10:d845189d146e | 27 | return Color(WheelPos * 3, 255 - WheelPos * 3, 0); |
kris@kris-X682X | 10:d845189d146e | 28 | } else if (WheelPos < 170) { |
kris@kris-X682X | 10:d845189d146e | 29 | WheelPos -= 85; |
kris@kris-X682X | 10:d845189d146e | 30 | return Color(255 - WheelPos * 3, 0, WheelPos * 3); |
kris@kris-X682X | 10:d845189d146e | 31 | } else { |
kris@kris-X682X | 10:d845189d146e | 32 | WheelPos -= 170; |
kris@kris-X682X | 10:d845189d146e | 33 | return Color(0, WheelPos * 3, 255 - WheelPos * 3); |
kris@kris-X682X | 10:d845189d146e | 34 | } |
kris@kris-X682X | 10:d845189d146e | 35 | } |
kris@kris-X682X | 10:d845189d146e | 36 | // Slightly different, this one makes the rainbow wheel equally distributed |
kris@kris-X682X | 10:d845189d146e | 37 | // along the chain |
kris@kris-X682X | 10:d845189d146e | 38 | void MyStripSingleton::rainbowCycle(uint8_t waittime) { |
kris@kris-X682X | 10:d845189d146e | 39 | int i, j; |
kris@kris-X682X | 10:d845189d146e | 40 | for (j=0; j < 256; j++) { // 5 cycles of all 25 colors in the wheel |
kris@kris-X682X | 10:d845189d146e | 41 | for (i=0; i < strip.numPixels(); i++) { |
kris@kris-X682X | 10:d845189d146e | 42 | strip.setPixelColor(i, Wheel( ((i * 256 / strip.numPixels()) + j) % 256) ); |
kris@kris-X682X | 10:d845189d146e | 43 | } |
kris@kris-X682X | 10:d845189d146e | 44 | strip.show(); // write all the pixels out |
kris@kris-X682X | 10:d845189d146e | 45 | wait_ms(waittime); |
kris@kris-X682X | 10:d845189d146e | 46 | } |
kris@kris-X682X | 10:d845189d146e | 47 | resetColor(); |
kris@kris-X682X | 10:d845189d146e | 48 | } |
kris@kris-X682X | 10:d845189d146e | 49 | void MyStripSingleton::solidColor(uint32_t c) { |
kris@kris-X682X | 10:d845189d146e | 50 | for (int z= STRIP_LENGTH; z >= 0 ; z--) { |
kris@kris-X682X | 10:d845189d146e | 51 | strip.setPixelColor(z, c); |
kris@kris-X682X | 10:d845189d146e | 52 | } |
kris@kris-X682X | 10:d845189d146e | 53 | show(); |
kris@kris-X682X | 10:d845189d146e | 54 | } |
kris@kris-X682X | 10:d845189d146e | 55 | |
kris@kris-X682X | 10:d845189d146e | 56 | void MyStripSingleton::show() { |
kris@kris-X682X | 10:d845189d146e | 57 | strip.show(); |
kris@kris-X682X | 10:d845189d146e | 58 | } |
kris@kris-X682X | 10:d845189d146e | 59 | void MyStripSingleton::colorWipe(uint8_t waittime, uint32_t c) { |
kris@kris-X682X | 10:d845189d146e | 60 | int i; |
kris@kris-X682X | 10:d845189d146e | 61 | |
kris@kris-X682X | 10:d845189d146e | 62 | for (i=0; i < strip.numPixels(); i++) { |
kris@kris-X682X | 10:d845189d146e | 63 | strip.setPixelColor(i, c); |
kris@kris-X682X | 10:d845189d146e | 64 | strip.show(); |
kris@kris-X682X | 10:d845189d146e | 65 | wait_ms(waittime); |
kris@kris-X682X | 10:d845189d146e | 66 | } |
kris@kris-X682X | 10:d845189d146e | 67 | } |
kris@kris-X682X | 10:d845189d146e | 68 | |
kris@kris-X682X | 10:d845189d146e | 69 | void MyStripSingleton::flash(int timeout, uint32_t c) { |
kris@kris-X682X | 10:d845189d146e | 70 | int targetColor = c; |
kris@kris-X682X | 10:d845189d146e | 71 | if(strip.getPixelColor(0) == 0){ |
kris@kris-X682X | 10:d845189d146e | 72 | targetColor = 0xFFFFFF; |
kris@kris-X682X | 10:d845189d146e | 73 | } |
kris@kris-X682X | 10:d845189d146e | 74 | uint32_t oldPixels[strip.numPixels()]; |
kris@kris-X682X | 10:d845189d146e | 75 | for (int i=0; i < strip.numPixels(); i++) { |
kris@kris-X682X | 10:d845189d146e | 76 | |
kris@kris-X682X | 10:d845189d146e | 77 | oldPixels[i] = strip.getPixelColor(i); |
kris@kris-X682X | 10:d845189d146e | 78 | strip.setPixelColor(i, targetColor); |
kris@kris-X682X | 10:d845189d146e | 79 | } |
kris@kris-X682X | 10:d845189d146e | 80 | wait_ms(timeout); |
kris@kris-X682X | 10:d845189d146e | 81 | show(); |
kris@kris-X682X | 10:d845189d146e | 82 | for (int i=0; i < strip.numPixels(); i++) { |
kris@kris-X682X | 10:d845189d146e | 83 | strip.setPixelColor(i, oldPixels[i]); |
kris@kris-X682X | 10:d845189d146e | 84 | } |
kris@kris-X682X | 10:d845189d146e | 85 | wait_ms(timeout); |
kris@kris-X682X | 10:d845189d146e | 86 | show(); |
kris@kris-X682X | 10:d845189d146e | 87 | } |
kris@kris-X682X | 10:d845189d146e | 88 | void MyStripSingleton::blink(int timeout, uint8_t amount) { |
kris@kris-X682X | 10:d845189d146e | 89 | int targetColor = 0; |
kris@kris-X682X | 10:d845189d146e | 90 | if(strip.getPixelColor(0) == 0){ |
kris@kris-X682X | 10:d845189d146e | 91 | targetColor = 0xFFFFFF; |
kris@kris-X682X | 10:d845189d146e | 92 | } |
kris@kris-X682X | 10:d845189d146e | 93 | uint32_t oldPixels[strip.numPixels()]; |
kris@kris-X682X | 10:d845189d146e | 94 | for (int i=0; i < strip.numPixels(); i++) { |
kris@kris-X682X | 10:d845189d146e | 95 | |
kris@kris-X682X | 10:d845189d146e | 96 | oldPixels[i] = strip.getPixelColor(i); |
kris@kris-X682X | 10:d845189d146e | 97 | strip.setPixelColor(i, targetColor); |
kris@kris-X682X | 10:d845189d146e | 98 | } |
kris@kris-X682X | 10:d845189d146e | 99 | show(); |
kris@kris-X682X | 10:d845189d146e | 100 | wait_ms(timeout); |
kris@kris-X682X | 10:d845189d146e | 101 | for (int i=0; i < strip.numPixels(); i++) { |
kris@kris-X682X | 10:d845189d146e | 102 | strip.setPixelColor(i, oldPixels[i]); |
kris@kris-X682X | 10:d845189d146e | 103 | } |
kris@kris-X682X | 10:d845189d146e | 104 | show(); |
kris@kris-X682X | 10:d845189d146e | 105 | |
kris@kris-X682X | 10:d845189d146e | 106 | if(amount > 1){ |
kris@kris-X682X | 10:d845189d146e | 107 | for (int a=1; a <= amount; a++) { |
kris@kris-X682X | 10:d845189d146e | 108 | for (int i=0; i < strip.numPixels(); i++) { |
kris@kris-X682X | 10:d845189d146e | 109 | strip.setPixelColor(i, targetColor); |
kris@kris-X682X | 10:d845189d146e | 110 | } |
kris@kris-X682X | 10:d845189d146e | 111 | show(); |
kris@kris-X682X | 10:d845189d146e | 112 | wait_ms(timeout); |
kris@kris-X682X | 10:d845189d146e | 113 | for (int i=0; i < strip.numPixels(); i++) { |
kris@kris-X682X | 10:d845189d146e | 114 | strip.setPixelColor(i, oldPixels[i]); |
kris@kris-X682X | 10:d845189d146e | 115 | } |
kris@kris-X682X | 10:d845189d146e | 116 | show(); |
kris@kris-X682X | 10:d845189d146e | 117 | } |
kris@kris-X682X | 10:d845189d146e | 118 | } |
kris@kris-X682X | 10:d845189d146e | 119 | } |
kris@kris-X682X | 10:d845189d146e | 120 | |
kris@kris-X682X | 10:d845189d146e | 121 | void MyStripSingleton::crawlNextLed(int timeout, uint32_t c) { |
kris@kris-X682X | 10:d845189d146e | 122 | if(crawlingLed > 0){ |
kris@kris-X682X | 10:d845189d146e | 123 | //Als er een ledje eerder is geweest reset naar oude kleur |
kris@kris-X682X | 10:d845189d146e | 124 | strip.setPixelColor(crawlingLed -1, crawlingLedOldColor); |
kris@kris-X682X | 10:d845189d146e | 125 | } else if(crawlingLed == 0 && crawlingLedOldColor != 0){ |
kris@kris-X682X | 10:d845189d146e | 126 | //Als het vorige ledje de laatste was, reset de laatste |
kris@kris-X682X | 10:d845189d146e | 127 | strip.setPixelColor(STRIP_LENGTH -1, crawlingLedOldColor); |
kris@kris-X682X | 10:d845189d146e | 128 | } |
kris@kris-X682X | 10:d845189d146e | 129 | //Oude kleur onthouden van de nieuwe crawler |
kris@kris-X682X | 10:d845189d146e | 130 | crawlingLedOldColor = strip.getPixelColor(crawlingLed); |
kris@kris-X682X | 10:d845189d146e | 131 | strip.setPixelColor(crawlingLed, c); |
kris@kris-X682X | 10:d845189d146e | 132 | strip.show(); |
kris@kris-X682X | 10:d845189d146e | 133 | wait_ms(timeout); |
kris@kris-X682X | 10:d845189d146e | 134 | crawlingLed++; |
kris@kris-X682X | 10:d845189d146e | 135 | if(crawlingLed == STRIP_LENGTH){ |
kris@kris-X682X | 10:d845189d146e | 136 | crawlingLed = 0; |
kris@kris-X682X | 10:d845189d146e | 137 | } |
kris@kris-X682X | 10:d845189d146e | 138 | } |
kris@kris-X682X | 10:d845189d146e | 139 | void MyStripSingleton::resetCrawl(){ |
kris@kris-X682X | 10:d845189d146e | 140 | if(crawlingLed == 0){ |
kris@kris-X682X | 10:d845189d146e | 141 | crawlingLed = STRIP_LENGTH; |
kris@kris-X682X | 10:d845189d146e | 142 | } |
kris@kris-X682X | 10:d845189d146e | 143 | strip.setPixelColor(crawlingLed -1, crawlingLedOldColor); |
kris@kris-X682X | 10:d845189d146e | 144 | crawlingLedOldColor = 0; |
kris@kris-X682X | 10:d845189d146e | 145 | crawlingLed = 0; |
kris@kris-X682X | 10:d845189d146e | 146 | strip.show(); |
kris@kris-X682X | 10:d845189d146e | 147 | } |
kris@kris-X682X | 10:d845189d146e | 148 | void MyStripSingleton::crawlSingleLed(int timeout, uint32_t c) { |
kris@kris-X682X | 10:d845189d146e | 149 | uint32_t oldcolor = 0; |
kris@kris-X682X | 10:d845189d146e | 150 | for (int i=0; i < strip.numPixels(); i++) { |
kris@kris-X682X | 10:d845189d146e | 151 | if(i > 0){ |
kris@kris-X682X | 10:d845189d146e | 152 | strip.setPixelColor(i -1, oldcolor); |
kris@kris-X682X | 10:d845189d146e | 153 | } |
kris@kris-X682X | 10:d845189d146e | 154 | oldcolor = strip.getPixelColor(i); |
kris@kris-X682X | 10:d845189d146e | 155 | strip.setPixelColor(i, c); |
kris@kris-X682X | 10:d845189d146e | 156 | wait_ms(timeout); |
kris@kris-X682X | 10:d845189d146e | 157 | show(); |
kris@kris-X682X | 10:d845189d146e | 158 | |
kris@kris-X682X | 10:d845189d146e | 159 | } |
kris@kris-X682X | 10:d845189d146e | 160 | } |
kris@kris-X682X | 10:d845189d146e | 161 | void MyStripSingleton::resetColor(){ |
kris@kris-X682X | 10:d845189d146e | 162 | int i; |
kris@kris-X682X | 10:d845189d146e | 163 | for (i=0; i < strip.numPixels(); i++) { |
kris@kris-X682X | 10:d845189d146e | 164 | strip.setPixelColor(i, ambientColor); |
kris@kris-X682X | 10:d845189d146e | 165 | } |
kris@kris-X682X | 10:d845189d146e | 166 | strip.show(); |
kris@kris-X682X | 10:d845189d146e | 167 | } |
kris@kris-X682X | 10:d845189d146e | 168 | void MyStripSingleton::connectionFlash() { |
kris@kris-X682X | 10:d845189d146e | 169 | flash(100, 0XFF0000); |
kris@kris-X682X | 10:d845189d146e | 170 | flash(100, 0XFF0000); |
kris@kris-X682X | 10:d845189d146e | 171 | flash(100, 0XFF0000); |
kris@kris-X682X | 10:d845189d146e | 172 | flash(100, 0XFF0000); |
kris@kris-X682X | 10:d845189d146e | 173 | } |
kris@kris-X682X | 10:d845189d146e | 174 | MyStripSingleton *MyStripSingleton::getInstance() { |
kris@kris-X682X | 10:d845189d146e | 175 | if(!instance ){ |
kris@kris-X682X | 10:d845189d146e | 176 | instance = new MyStripSingleton(); |
kris@kris-X682X | 10:d845189d146e | 177 | } |
kris@kris-X682X | 10:d845189d146e | 178 | return instance; |
kris@kris-X682X | 10:d845189d146e | 179 | } |