library to drive dotstar strip

Fork of DotStar by Suga koubou

Committer:
Nathan Yonkee
Date:
Fri Aug 11 12:29:35 2017 -0600
Revision:
18:14fbcae5daf2
Parent:
17:87705cdd3f70
make into library

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Nathan Yonkee 17:87705cdd3f70 1 #include "rtos.h"
Nathan Yonkee 17:87705cdd3f70 2
Nathan Yonkee 17:87705cdd3f70 3 class DotStar {
Nathan Yonkee 17:87705cdd3f70 4 SPI* const spi_;
Nathan Yonkee 17:87705cdd3f70 5 const int ledNum_;
Nathan Yonkee 17:87705cdd3f70 6 int brightness_;
Nathan Yonkee 17:87705cdd3f70 7 int colors_[3];
Nathan Yonkee 17:87705cdd3f70 8 public:
Nathan Yonkee 17:87705cdd3f70 9 enum { red = 0, green = 1, blue = 2 };
Nathan Yonkee 17:87705cdd3f70 10 enum { redIndex = 2, greenIndex = 3, blueIndex = 4 };
Nathan Yonkee 17:87705cdd3f70 11 enum {off = 0, dim = 8, half = 16, brightest = 31};
Nathan Yonkee 17:87705cdd3f70 12 enum {pause = 100, sleep = 2000};
Nathan Yonkee 17:87705cdd3f70 13 enum cmdType : char {
Nathan Yonkee 17:87705cdd3f70 14 setColor = '!',
Nathan Yonkee 17:87705cdd3f70 15 onOff = 'o',
Nathan Yonkee 17:87705cdd3f70 16 switchStrip = 's'
Nathan Yonkee 17:87705cdd3f70 17 };
Nathan Yonkee 17:87705cdd3f70 18 void set_color(const int color, const int val);
Nathan Yonkee 17:87705cdd3f70 19 void set_leds();
Nathan Yonkee 17:87705cdd3f70 20 DotStar(SPI* const spi, const int nLeds);
Nathan Yonkee 17:87705cdd3f70 21 void set_brightness(const int brightness);
Nathan Yonkee 17:87705cdd3f70 22 };
Nathan Yonkee 17:87705cdd3f70 23
Nathan Yonkee 17:87705cdd3f70 24 struct RedGreenBlue {
Nathan Yonkee 17:87705cdd3f70 25 int red, green, blue;
Nathan Yonkee 17:87705cdd3f70 26 };
Nathan Yonkee 17:87705cdd3f70 27
Nathan Yonkee 17:87705cdd3f70 28 class DotStarPair {
Nathan Yonkee 17:87705cdd3f70 29 DotStar* left;
Nathan Yonkee 17:87705cdd3f70 30 DotStar* right;
Nathan Yonkee 17:87705cdd3f70 31 public:
Nathan Yonkee 17:87705cdd3f70 32 DotStarPair(DotStar* l, DotStar* r);
Nathan Yonkee 17:87705cdd3f70 33 void set_brightness(const int brightness);
Nathan Yonkee 17:87705cdd3f70 34 void set_rgb(const RedGreenBlue& rgb);
Nathan Yonkee 17:87705cdd3f70 35 };
Nathan Yonkee 17:87705cdd3f70 36
Nathan Yonkee 17:87705cdd3f70 37 DotStarPair::DotStarPair(DotStar* l, DotStar* r) : left(l), right(r) {}
Nathan Yonkee 17:87705cdd3f70 38
Nathan Yonkee 17:87705cdd3f70 39 void DotStarPair::set_brightness(const int brightness) {
Nathan Yonkee 17:87705cdd3f70 40 left->set_brightness(brightness);
Nathan Yonkee 17:87705cdd3f70 41 left->set_leds();
Nathan Yonkee 17:87705cdd3f70 42 right->set_brightness(brightness);
Nathan Yonkee 17:87705cdd3f70 43 right->set_leds();
Nathan Yonkee 17:87705cdd3f70 44 };
Nathan Yonkee 17:87705cdd3f70 45
Nathan Yonkee 17:87705cdd3f70 46 void DotStarPair::set_rgb(const RedGreenBlue& rgb) {
Nathan Yonkee 17:87705cdd3f70 47 left->set_color(DotStar::blue, rgb.blue);
Nathan Yonkee 17:87705cdd3f70 48 left->set_color(DotStar::red, rgb.red);
Nathan Yonkee 17:87705cdd3f70 49 left->set_color(DotStar::green, rgb.green);
Nathan Yonkee 17:87705cdd3f70 50 left->set_leds();
Nathan Yonkee 17:87705cdd3f70 51 right->set_color(DotStar::blue, rgb.blue);
Nathan Yonkee 17:87705cdd3f70 52 right->set_color(DotStar::red, rgb.red);
Nathan Yonkee 17:87705cdd3f70 53 right->set_color(DotStar::green, rgb.green);
Nathan Yonkee 17:87705cdd3f70 54 right->set_leds();
Nathan Yonkee 17:87705cdd3f70 55 };
Nathan Yonkee 17:87705cdd3f70 56
Nathan Yonkee 17:87705cdd3f70 57 DotStar::DotStar(SPI* const spi, const int nLeds) : spi_(spi), ledNum_(nLeds),
Nathan Yonkee 17:87705cdd3f70 58 brightness_(Init::brightness) {
Nathan Yonkee 17:87705cdd3f70 59 spi_->frequency(Init::frequency);
Nathan Yonkee 17:87705cdd3f70 60 colors_[DotStar::red] = Init::red;
Nathan Yonkee 17:87705cdd3f70 61 colors_[DotStar::blue] = Init::blue;
Nathan Yonkee 17:87705cdd3f70 62 colors_[DotStar::green] = Init::green;
Nathan Yonkee 17:87705cdd3f70 63 set_leds();
Nathan Yonkee 17:87705cdd3f70 64 }
Nathan Yonkee 17:87705cdd3f70 65
Nathan Yonkee 17:87705cdd3f70 66 void DotStar::set_leds() {
Nathan Yonkee 17:87705cdd3f70 67 const int brightnessFrame = (7<<5)|brightness_;
Nathan Yonkee 17:87705cdd3f70 68 const int blueFrame = (colors_[DotStar::blue] ) & 0xff;
Nathan Yonkee 17:87705cdd3f70 69 const int greenFrame = (colors_[DotStar::green]) & 0xff;
Nathan Yonkee 17:87705cdd3f70 70 const int redFrame = colors_[DotStar::red] & 0xff;
Nathan Yonkee 17:87705cdd3f70 71 int i;
Nathan Yonkee 17:87705cdd3f70 72 Thread::wait(DotStar::pause);
Nathan Yonkee 17:87705cdd3f70 73 for (i = 4; i --> 0; spi_->write(0)) { } // start frame
Nathan Yonkee 17:87705cdd3f70 74 for (i = 0; i < ledNum_ ; ++i) {
Nathan Yonkee 17:87705cdd3f70 75 spi_->write(brightnessFrame); // led frame
Nathan Yonkee 17:87705cdd3f70 76 spi_->write(blueFrame); // B
Nathan Yonkee 17:87705cdd3f70 77 spi_->write(greenFrame); // G
Nathan Yonkee 17:87705cdd3f70 78 spi_->write(redFrame); // R
Nathan Yonkee 17:87705cdd3f70 79 }
Nathan Yonkee 17:87705cdd3f70 80 for (i = 4; i --> 0; spi_->write(1)) { } // end frame
Nathan Yonkee 17:87705cdd3f70 81 }
Nathan Yonkee 17:87705cdd3f70 82
Nathan Yonkee 17:87705cdd3f70 83 void DotStar::set_brightness(const int brightness) {
Nathan Yonkee 17:87705cdd3f70 84 brightness_ = brightness;
Nathan Yonkee 17:87705cdd3f70 85 }
Nathan Yonkee 17:87705cdd3f70 86
Nathan Yonkee 17:87705cdd3f70 87 void DotStar::set_color(const int c, const int val) {
Nathan Yonkee 17:87705cdd3f70 88 colors_[c] = val;
Nathan Yonkee 17:87705cdd3f70 89 };