Ble for smart sOlutions

Dependencies:   Adafruit_WS2801

Committer:
kris@kris-X682X
Date:
Fri Jun 14 10:24:57 2019 +0200
Revision:
10:d845189d146e
Child:
11:d6ed1437c2ee
WS2801 working, fancy lightshows

Who changed what in which revision?

UserRevisionLine numberNew 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 void MyStripSingleton::rainbow(uint8_t waittime) {
kris@kris-X682X 10:d845189d146e 37 int i, j;
kris@kris-X682X 10:d845189d146e 38
kris@kris-X682X 10:d845189d146e 39 for (j=0; j < 256; j++) { // 3 cycles of all 256 colors in the wheel
kris@kris-X682X 10:d845189d146e 40 for (i=0; i < strip.numPixels(); i++) {
kris@kris-X682X 10:d845189d146e 41 strip.setPixelColor(i, Wheel( (i + j) % 255));
kris@kris-X682X 10:d845189d146e 42 }
kris@kris-X682X 10:d845189d146e 43 strip.show(); // write all the pixels out
kris@kris-X682X 10:d845189d146e 44 wait_ms(waittime);// (wait);
kris@kris-X682X 10:d845189d146e 45 }
kris@kris-X682X 10:d845189d146e 46 }
kris@kris-X682X 10:d845189d146e 47
kris@kris-X682X 10:d845189d146e 48 // Slightly different, this one makes the rainbow wheel equally distributed
kris@kris-X682X 10:d845189d146e 49 // along the chain
kris@kris-X682X 10:d845189d146e 50 void MyStripSingleton::rainbowCycle(uint8_t waittime) {
kris@kris-X682X 10:d845189d146e 51 int i, j;
kris@kris-X682X 10:d845189d146e 52 for (j=0; j < 256; j++) { // 5 cycles of all 25 colors in the wheel
kris@kris-X682X 10:d845189d146e 53 for (i=0; i < strip.numPixels(); i++) {
kris@kris-X682X 10:d845189d146e 54 strip.setPixelColor(i, Wheel( ((i * 256 / strip.numPixels()) + j) % 256) );
kris@kris-X682X 10:d845189d146e 55 }
kris@kris-X682X 10:d845189d146e 56 strip.show(); // write all the pixels out
kris@kris-X682X 10:d845189d146e 57 wait_ms(waittime);
kris@kris-X682X 10:d845189d146e 58 }
kris@kris-X682X 10:d845189d146e 59 resetColor();
kris@kris-X682X 10:d845189d146e 60 }
kris@kris-X682X 10:d845189d146e 61 void MyStripSingleton::solidColor(uint32_t c) {
kris@kris-X682X 10:d845189d146e 62 for (int z= STRIP_LENGTH; z >= 0 ; z--) {
kris@kris-X682X 10:d845189d146e 63 strip.setPixelColor(z, c);
kris@kris-X682X 10:d845189d146e 64 }
kris@kris-X682X 10:d845189d146e 65 show();
kris@kris-X682X 10:d845189d146e 66 }
kris@kris-X682X 10:d845189d146e 67
kris@kris-X682X 10:d845189d146e 68 void MyStripSingleton::show() {
kris@kris-X682X 10:d845189d146e 69 strip.show();
kris@kris-X682X 10:d845189d146e 70 }
kris@kris-X682X 10:d845189d146e 71 void MyStripSingleton::colorWipe(uint8_t waittime, uint32_t c) {
kris@kris-X682X 10:d845189d146e 72 int i;
kris@kris-X682X 10:d845189d146e 73
kris@kris-X682X 10:d845189d146e 74 for (i=0; i < strip.numPixels(); i++) {
kris@kris-X682X 10:d845189d146e 75 strip.setPixelColor(i, c);
kris@kris-X682X 10:d845189d146e 76 strip.show();
kris@kris-X682X 10:d845189d146e 77 wait_ms(waittime);
kris@kris-X682X 10:d845189d146e 78 }
kris@kris-X682X 10:d845189d146e 79 }
kris@kris-X682X 10:d845189d146e 80
kris@kris-X682X 10:d845189d146e 81 void MyStripSingleton::flash(int timeout, uint32_t c) {
kris@kris-X682X 10:d845189d146e 82 int targetColor = c;
kris@kris-X682X 10:d845189d146e 83 if(strip.getPixelColor(0) == 0){
kris@kris-X682X 10:d845189d146e 84 targetColor = 0xFFFFFF;
kris@kris-X682X 10:d845189d146e 85 }
kris@kris-X682X 10:d845189d146e 86 uint32_t oldPixels[strip.numPixels()];
kris@kris-X682X 10:d845189d146e 87 for (int i=0; i < strip.numPixels(); i++) {
kris@kris-X682X 10:d845189d146e 88
kris@kris-X682X 10:d845189d146e 89 oldPixels[i] = strip.getPixelColor(i);
kris@kris-X682X 10:d845189d146e 90 strip.setPixelColor(i, targetColor);
kris@kris-X682X 10:d845189d146e 91 }
kris@kris-X682X 10:d845189d146e 92 wait_ms(timeout);
kris@kris-X682X 10:d845189d146e 93 show();
kris@kris-X682X 10:d845189d146e 94 for (int i=0; i < strip.numPixels(); i++) {
kris@kris-X682X 10:d845189d146e 95 strip.setPixelColor(i, oldPixels[i]);
kris@kris-X682X 10:d845189d146e 96 }
kris@kris-X682X 10:d845189d146e 97 wait_ms(timeout);
kris@kris-X682X 10:d845189d146e 98 show();
kris@kris-X682X 10:d845189d146e 99 }
kris@kris-X682X 10:d845189d146e 100 void MyStripSingleton::blink(int timeout, uint8_t amount) {
kris@kris-X682X 10:d845189d146e 101 int targetColor = 0;
kris@kris-X682X 10:d845189d146e 102 if(strip.getPixelColor(0) == 0){
kris@kris-X682X 10:d845189d146e 103 targetColor = 0xFFFFFF;
kris@kris-X682X 10:d845189d146e 104 }
kris@kris-X682X 10:d845189d146e 105 uint32_t oldPixels[strip.numPixels()];
kris@kris-X682X 10:d845189d146e 106 for (int i=0; i < strip.numPixels(); i++) {
kris@kris-X682X 10:d845189d146e 107
kris@kris-X682X 10:d845189d146e 108 oldPixels[i] = strip.getPixelColor(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 if(amount > 1){
kris@kris-X682X 10:d845189d146e 119 for (int a=1; a <= amount; a++) {
kris@kris-X682X 10:d845189d146e 120 for (int i=0; i < strip.numPixels(); i++) {
kris@kris-X682X 10:d845189d146e 121 strip.setPixelColor(i, targetColor);
kris@kris-X682X 10:d845189d146e 122 }
kris@kris-X682X 10:d845189d146e 123 show();
kris@kris-X682X 10:d845189d146e 124 wait_ms(timeout);
kris@kris-X682X 10:d845189d146e 125 for (int i=0; i < strip.numPixels(); i++) {
kris@kris-X682X 10:d845189d146e 126 strip.setPixelColor(i, oldPixels[i]);
kris@kris-X682X 10:d845189d146e 127 }
kris@kris-X682X 10:d845189d146e 128 show();
kris@kris-X682X 10:d845189d146e 129 }
kris@kris-X682X 10:d845189d146e 130 }
kris@kris-X682X 10:d845189d146e 131 }
kris@kris-X682X 10:d845189d146e 132
kris@kris-X682X 10:d845189d146e 133 void MyStripSingleton::crawlNextLed(int timeout, uint32_t c) {
kris@kris-X682X 10:d845189d146e 134 if(crawlingLed > 0){
kris@kris-X682X 10:d845189d146e 135 //Als er een ledje eerder is geweest reset naar oude kleur
kris@kris-X682X 10:d845189d146e 136 strip.setPixelColor(crawlingLed -1, crawlingLedOldColor);
kris@kris-X682X 10:d845189d146e 137 } else if(crawlingLed == 0 && crawlingLedOldColor != 0){
kris@kris-X682X 10:d845189d146e 138 //Als het vorige ledje de laatste was, reset de laatste
kris@kris-X682X 10:d845189d146e 139 strip.setPixelColor(STRIP_LENGTH -1, crawlingLedOldColor);
kris@kris-X682X 10:d845189d146e 140 }
kris@kris-X682X 10:d845189d146e 141 //Oude kleur onthouden van de nieuwe crawler
kris@kris-X682X 10:d845189d146e 142 crawlingLedOldColor = strip.getPixelColor(crawlingLed);
kris@kris-X682X 10:d845189d146e 143 strip.setPixelColor(crawlingLed, c);
kris@kris-X682X 10:d845189d146e 144 strip.show();
kris@kris-X682X 10:d845189d146e 145 wait_ms(timeout);
kris@kris-X682X 10:d845189d146e 146 crawlingLed++;
kris@kris-X682X 10:d845189d146e 147 if(crawlingLed == STRIP_LENGTH){
kris@kris-X682X 10:d845189d146e 148 crawlingLed = 0;
kris@kris-X682X 10:d845189d146e 149 }
kris@kris-X682X 10:d845189d146e 150 }
kris@kris-X682X 10:d845189d146e 151 void MyStripSingleton::resetCrawl(){
kris@kris-X682X 10:d845189d146e 152 if(crawlingLed == 0){
kris@kris-X682X 10:d845189d146e 153 crawlingLed = STRIP_LENGTH;
kris@kris-X682X 10:d845189d146e 154 }
kris@kris-X682X 10:d845189d146e 155 strip.setPixelColor(crawlingLed -1, crawlingLedOldColor);
kris@kris-X682X 10:d845189d146e 156 crawlingLedOldColor = 0;
kris@kris-X682X 10:d845189d146e 157 crawlingLed = 0;
kris@kris-X682X 10:d845189d146e 158 strip.show();
kris@kris-X682X 10:d845189d146e 159 }
kris@kris-X682X 10:d845189d146e 160 void MyStripSingleton::crawlSingleLed(int timeout, uint32_t c) {
kris@kris-X682X 10:d845189d146e 161 uint32_t oldcolor = 0;
kris@kris-X682X 10:d845189d146e 162 for (int i=0; i < strip.numPixels(); i++) {
kris@kris-X682X 10:d845189d146e 163 if(i > 0){
kris@kris-X682X 10:d845189d146e 164 strip.setPixelColor(i -1, oldcolor);
kris@kris-X682X 10:d845189d146e 165 }
kris@kris-X682X 10:d845189d146e 166 oldcolor = strip.getPixelColor(i);
kris@kris-X682X 10:d845189d146e 167 strip.setPixelColor(i, c);
kris@kris-X682X 10:d845189d146e 168 wait_ms(timeout);
kris@kris-X682X 10:d845189d146e 169 show();
kris@kris-X682X 10:d845189d146e 170
kris@kris-X682X 10:d845189d146e 171 }
kris@kris-X682X 10:d845189d146e 172 }
kris@kris-X682X 10:d845189d146e 173 void MyStripSingleton::resetColor(){
kris@kris-X682X 10:d845189d146e 174 int i;
kris@kris-X682X 10:d845189d146e 175 for (i=0; i < strip.numPixels(); i++) {
kris@kris-X682X 10:d845189d146e 176 strip.setPixelColor(i, ambientColor);
kris@kris-X682X 10:d845189d146e 177 }
kris@kris-X682X 10:d845189d146e 178 strip.show();
kris@kris-X682X 10:d845189d146e 179 }
kris@kris-X682X 10:d845189d146e 180 void MyStripSingleton::connectionFlash() {
kris@kris-X682X 10:d845189d146e 181 flash(100, 0XFF0000);
kris@kris-X682X 10:d845189d146e 182 flash(100, 0XFF0000);
kris@kris-X682X 10:d845189d146e 183 flash(100, 0XFF0000);
kris@kris-X682X 10:d845189d146e 184 flash(100, 0XFF0000);
kris@kris-X682X 10:d845189d146e 185 }
kris@kris-X682X 10:d845189d146e 186 MyStripSingleton *MyStripSingleton::getInstance() {
kris@kris-X682X 10:d845189d146e 187 if(!instance ){
kris@kris-X682X 10:d845189d146e 188 instance = new MyStripSingleton();
kris@kris-X682X 10:d845189d146e 189 }
kris@kris-X682X 10:d845189d146e 190 return instance;
kris@kris-X682X 10:d845189d146e 191 }