Nathan Yonkee
/
DotStar
library to drive dotstar strip
Fork of DotStar by
Revision 18:14fbcae5daf2, committed 2017-08-11
- Comitter:
- Nathan Yonkee
- Date:
- Fri Aug 11 12:29:35 2017 -0600
- Parent:
- 17:87705cdd3f70
- Commit message:
- make into library
Changed in this revision
main.cpp | Show diff for this revision Revisions of this file |
--- a/main.cpp Fri Aug 11 12:28:51 2017 -0600 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,156 +0,0 @@ -#include "mbed.h" -#include "rtos.h" - -RawSerial dev(PA_9, PA_10); -SPI spiOne(PB_5, PB_4, PB_3); -SPI spiTwo(PA_7, PA_6, PA_5); -const int nLedsA = 455; -const int nLedsB = 455; -enum Init {brightness = 4, frequency = 500000, red = 35, green = 3, blue = 0, baud = 9600}; - -class DotStar { - SPI* const spi_; - const int ledNum_; - int brightness_; - int colors_[3]; - public: - enum { red = 0, green = 1, blue = 2 }; - enum { redIndex = 2, greenIndex = 3, blueIndex = 4 }; - enum {off = 0, dim = 8, half = 16, brightest = 31}; - enum {pause = 100, sleep = 2000}; - enum cmdType : char { - setColor = '!', - onOff = 'o', - switchStrip = 's' - }; - void set_color(const int color, const int val); - void set_leds(); - DotStar(SPI* const spi, const int nLeds); - void set_brightness(const int brightness); -}; - -struct RedGreenBlue { - int red, green, blue; -}; - -class DotStarPair { - DotStar* left; - DotStar* right; - public: - DotStarPair(DotStar* l, DotStar* r); - void set_brightness(const int brightness); - void set_rgb(const RedGreenBlue& rgb); -}; - -DotStarPair::DotStarPair(DotStar* l, DotStar* r) : left(l), right(r) {} - -void DotStarPair::set_brightness(const int brightness) { - left->set_brightness(brightness); - left->set_leds(); - right->set_brightness(brightness); - right->set_leds(); -}; - -void DotStarPair::set_rgb(const RedGreenBlue& rgb) { - left->set_color(DotStar::blue, rgb.blue); - left->set_color(DotStar::red, rgb.red); - left->set_color(DotStar::green, rgb.green); - left->set_leds(); - right->set_color(DotStar::blue, rgb.blue); - right->set_color(DotStar::red, rgb.red); - right->set_color(DotStar::green, rgb.green); - right->set_leds(); -}; - -DotStar::DotStar(SPI* const spi, const int nLeds) : spi_(spi), ledNum_(nLeds), - brightness_(Init::brightness) { - spi_->frequency(Init::frequency); - colors_[DotStar::red] = Init::red; - colors_[DotStar::blue] = Init::blue; - colors_[DotStar::green] = Init::green; - set_leds(); -} - - -void DotStar::set_leds() { - const int brightnessFrame = (7<<5)|brightness_; - const int blueFrame = (colors_[DotStar::blue] ) & 0xff; - const int greenFrame = (colors_[DotStar::green]) & 0xff; - const int redFrame = colors_[DotStar::red] & 0xff; - int i; - Thread::wait(DotStar::pause); - for (i = 4; i --> 0; spi_->write(0)) { } // start frame - for (i = 0; i < ledNum_ ; ++i) { - spi_->write(brightnessFrame); // led frame - spi_->write(blueFrame); // B - spi_->write(greenFrame); // G - spi_->write(redFrame); // R - } - for (i = 4; i --> 0; spi_->write(1)) { } // end frame -} - -void DotStar::set_brightness(const int brightness) { - brightness_ = brightness; -} - -void DotStar::set_color(const int c, const int val) { - colors_[c] = val; -}; - -DotStar dotStarA(&spiOne, nLedsA); -DotStar dotStarB(&spiTwo, nLedsB); - -DotStarPair strips(&dotStarA, &dotStarB); - -int main() { - dev.baud(Init::baud); - for (int i = 1; i < DotStar::brightest; i += 4) { - strips.set_brightness(i); - } - bool sleeping = false; -#define STR_BUFF_SIZE_VAR 6 - char bleCmdString[STR_BUFF_SIZE_VAR] = {}; - for (; ; ) { - for (int i = 0; i < STR_BUFF_SIZE_VAR; i++) { - bleCmdString[i] = 0; - } - dev.putc('a'); - strips.set_brightness(DotStar::half); - int i = 0; - int j = 0; - while (i < STR_BUFF_SIZE_VAR) { - while(dev.readable()) { - bleCmdString[i] = dev.getc(); - ++i; - } - if(j++ > 30000000) break; - } - /* strips.set_brightness(DotStar::dim); */ - auto cmdPrefix = bleCmdString[0]; - if (cmdPrefix == DotStar::cmdType::setColor) { - RedGreenBlue rgb; - rgb.red = (int)(bleCmdString[DotStar::redIndex]); - rgb.green = (int)(bleCmdString[DotStar::greenIndex]); - rgb.blue = (int)(bleCmdString[DotStar::blueIndex]); - strips.set_rgb(rgb); - /* strips.set_brightness(DotStar::half); */ - /* Thread::wait(DotStar::sleep); */ - } else if (cmdPrefix == DotStar::cmdType::onOff) { - sleeping = true; - strips.set_brightness(DotStar::dim); - Thread::wait(DotStar::pause); - } - while (sleeping) { - strips.set_brightness(DotStar::off); - Thread::wait(DotStar::sleep); - while (dev.readable()) { - if (dev.getc() == DotStar::cmdType::onOff) { - sleeping = false; - strips.set_brightness(DotStar::dim); - Thread::wait(DotStar::pause); - } - } - } - } - -}