Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp
00001 #include "mbed.h" 00002 #include "rtos.h" 00003 00004 RawSerial dev(PA_9, PA_10); 00005 SPI spiOne(PB_5, PB_4, PB_3); 00006 SPI spiTwo(PA_7, PA_6, PA_5); 00007 const int nLedsA = 455; 00008 const int nLedsB = 455; 00009 enum Init {brightness = 4, frequency = 500000, red = 35, green = 3, blue = 0, baud = 9600}; 00010 00011 class DotStar { 00012 SPI* const spi_; 00013 const int ledNum_; 00014 int brightness_; 00015 int colors_[3]; 00016 public: 00017 enum { red = 0, green = 1, blue = 2 }; 00018 enum { redIndex = 2, greenIndex = 3, blueIndex = 4 }; 00019 enum {off = 0, dim = 8, half = 16, brightest = 31}; 00020 enum {pause = 100, sleep = 2000}; 00021 enum cmdType : char { 00022 setColor = '!', 00023 onOff = 'o', 00024 switchStrip = 's' 00025 }; 00026 void set_color(const int color, const int val); 00027 void set_leds(); 00028 DotStar(SPI* const spi, const int nLeds); 00029 void set_brightness(const int brightness); 00030 }; 00031 00032 struct RedGreenBlue { 00033 int red, green, blue; 00034 }; 00035 00036 class DotStarPair { 00037 DotStar* left; 00038 DotStar* right; 00039 public: 00040 DotStarPair(DotStar* l, DotStar* r); 00041 void set_brightness(const int brightness); 00042 void set_rgb(const RedGreenBlue& rgb); 00043 }; 00044 00045 DotStarPair::DotStarPair(DotStar* l, DotStar* r) : left(l), right(r) {} 00046 00047 void DotStarPair::set_brightness(const int brightness) { 00048 left->set_brightness(brightness); 00049 left->set_leds(); 00050 right->set_brightness(brightness); 00051 right->set_leds(); 00052 }; 00053 00054 void DotStarPair::set_rgb(const RedGreenBlue& rgb) { 00055 left->set_color(DotStar::blue, rgb.blue); 00056 left->set_color(DotStar::red, rgb.red); 00057 left->set_color(DotStar::green, rgb.green); 00058 left->set_leds(); 00059 right->set_color(DotStar::blue, rgb.blue); 00060 right->set_color(DotStar::red, rgb.red); 00061 right->set_color(DotStar::green, rgb.green); 00062 right->set_leds(); 00063 }; 00064 00065 DotStar::DotStar(SPI* const spi, const int nLeds) : spi_(spi), ledNum_(nLeds), 00066 brightness_(Init::brightness) { 00067 spi_->frequency(Init::frequency); 00068 colors_[DotStar::red] = Init::red; 00069 colors_[DotStar::blue] = Init::blue; 00070 colors_[DotStar::green] = Init::green; 00071 set_leds(); 00072 } 00073 00074 00075 void DotStar::set_leds() { 00076 const int brightnessFrame = (7<<5)|brightness_; 00077 const int blueFrame = (colors_[DotStar::blue] ) & 0xff; 00078 const int greenFrame = (colors_[DotStar::green]) & 0xff; 00079 const int redFrame = colors_[DotStar::red] & 0xff; 00080 int i; 00081 Thread::wait(DotStar::pause); 00082 for (i = 4; i --> 0; spi_->write(0)) { } // start frame 00083 for (i = 0; i < ledNum_ ; ++i) { 00084 spi_->write(brightnessFrame); // led frame 00085 spi_->write(blueFrame); // B 00086 spi_->write(greenFrame); // G 00087 spi_->write(redFrame); // R 00088 } 00089 for (i = 4; i --> 0; spi_->write(1)) { } // end frame 00090 } 00091 00092 void DotStar::set_brightness(const int brightness) { 00093 brightness_ = brightness; 00094 } 00095 00096 void DotStar::set_color(const int c, const int val) { 00097 colors_[c] = val; 00098 }; 00099 00100 DotStar dotStarA(&spiOne, nLedsA); 00101 DotStar dotStarB(&spiTwo, nLedsB); 00102 00103 DotStarPair strips(&dotStarA, &dotStarB); 00104 00105 int main() { 00106 dev.baud(Init::baud); 00107 for (int i = 1; i < DotStar::brightest; i += 4) { 00108 strips.set_brightness(i); 00109 } 00110 bool sleeping = false; 00111 #define STR_BUFF_SIZE_VAR 6 00112 char bleCmdString[STR_BUFF_SIZE_VAR] = {}; 00113 for (; ; ) { 00114 for (int i = 0; i < STR_BUFF_SIZE_VAR; i++) { 00115 bleCmdString[i] = 0; 00116 } 00117 dev.putc('a'); 00118 strips.set_brightness(DotStar::half); 00119 int i = 0; 00120 int j = 0; 00121 while (i < STR_BUFF_SIZE_VAR) { 00122 while(dev.readable()) { 00123 bleCmdString[i] = dev.getc(); 00124 ++i; 00125 } 00126 if(j++ > 30000000) break; 00127 } 00128 /* strips.set_brightness(DotStar::dim); */ 00129 auto cmdPrefix = bleCmdString[0]; 00130 if (cmdPrefix == DotStar::cmdType::setColor) { 00131 RedGreenBlue rgb; 00132 rgb.red = (int)(bleCmdString[DotStar::redIndex]); 00133 rgb.green = (int)(bleCmdString[DotStar::greenIndex]); 00134 rgb.blue = (int)(bleCmdString[DotStar::blueIndex]); 00135 strips.set_rgb(rgb); 00136 /* strips.set_brightness(DotStar::half); */ 00137 /* Thread::wait(DotStar::sleep); */ 00138 } else if (cmdPrefix == DotStar::cmdType::onOff) { 00139 sleeping = true; 00140 strips.set_brightness(DotStar::dim); 00141 Thread::wait(DotStar::pause); 00142 } 00143 while (sleeping) { 00144 strips.set_brightness(DotStar::off); 00145 Thread::wait(DotStar::sleep); 00146 while (dev.readable()) { 00147 if (dev.getc() == DotStar::cmdType::onOff) { 00148 sleeping = false; 00149 strips.set_brightness(DotStar::dim); 00150 Thread::wait(DotStar::pause); 00151 } 00152 } 00153 } 00154 } 00155 00156 }
Generated on Sat Jul 16 2022 01:40:19 by
1.7.2