![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
library to drive dotstar strip
Fork of DotStar by
DotStar.h@18:14fbcae5daf2, 2017-08-11 (annotated)
- 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?
User | Revision | Line number | New 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 | }; |