Ble for smart sOlutions

Dependencies:   Adafruit_WS2801

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?

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 // 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 }