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.
Dependencies: mbed ros_lib_kinetic
RGBA_LED.cpp
00001 00002 #include "RGBA_LED.h" 00003 00004 RGBA_LED::RGBA_LED(I2C *i2c, DigitalOut *inv_out_en, int addr, bool amber_enabled) 00005 : step_time_(RGB_LED_PERIOD), def_color_fade_time_(DEF_CLR_FADE_T), def_alpha_fade_time_(DEF_ALP_FADE_T) 00006 { 00007 00008 led_driver_ = new PCA9634(i2c, inv_out_en, addr); 00009 00010 strip_leds_[0] = RGBA<ledID>(LED_STR0_R, LED_STR0_G, LED_STR0_B, LED_STR0_A); 00011 strip_leds_[1] = RGBA<ledID>(LED_STR1_R, LED_STR1_G, LED_STR1_B, LED_STR1_A); 00012 00013 setColor(RGBA<float>(0,0,0,0)); 00014 setBrightness(1.0); 00015 00016 // TODO: Replace with setColorProgram, setBrightnessProgram 00017 for (int i = 0; i < 2; i++) { 00018 count_color_[i] = 0; 00019 count_alpha_[i] = 0; 00020 } 00021 00022 if (amber_enabled) 00023 enableAmber(); 00024 else 00025 disableAmber(); 00026 } 00027 00028 void RGBA_LED::disableAmber() { 00029 disableAmber(0); 00030 disableAmber(1); 00031 } 00032 void RGBA_LED::disableAmber(int stripID) { 00033 led_driver_->disableLED(strip_leds_[stripID].a); 00034 } 00035 00036 void RGBA_LED::enableAmber() { 00037 enableAmber(0); 00038 enableAmber(1); 00039 } 00040 void RGBA_LED::enableAmber(int stripID) { 00041 led_driver_->enableLED(strip_leds_[stripID].a); 00042 } 00043 00044 00045 void RGBA_LED::setColor(RGBA<float> color) { 00046 setColor(color, 0); 00047 setColor(color, 1); 00048 } 00049 00050 void RGBA_LED::setColor(RGBA<float> color, int stripID) { 00051 cur_color_[stripID] = color; 00052 updatePWMs(stripID); 00053 } 00054 00055 void RGBA_LED::setBrightness(float alpha) { 00056 setBrightness(alpha, 0); 00057 setBrightness(alpha, 1); 00058 } 00059 00060 void RGBA_LED::setBrightness(float alpha, int stripID) { 00061 cur_alpha_[stripID] = alpha; 00062 updatePWMs(stripID); 00063 } 00064 00065 00066 void RGBA_LED::setDefaultColorFadeTime(int def_color_fade_time) { 00067 def_color_fade_time_ = def_color_fade_time; 00068 } 00069 00070 void RGBA_LED::setDefaultBrightnessFadeTime(int def_alpha_fade_time) { 00071 def_alpha_fade_time_ = def_alpha_fade_time; 00072 } 00073 00074 int RGBA_LED::getStepTime() { 00075 return step_time_; 00076 } 00077 00078 void RGBA_LED::step() { 00079 bool update = false; 00080 00081 for (int i = 0; i < 2; i++) { 00082 if (count_color_[i] > 0) { 00083 count_color_[i]--; 00084 // Transition to next color in program 00085 if (count_color_[i] == 0) { 00086 int i_curr = (ind_color_program_[i] + 1) % color_program_[i].size(); 00087 int i_next = (ind_color_program_[i] + 2) % color_program_[i].size(); 00088 ind_color_program_[i] = i_curr; 00089 cur_color_[i] = color_program_[i][i_curr]; 00090 count_color_[i] = ceil(color_time_program_[i][i_curr]/step_time_); 00091 dcolor_[i] = (color_program_[i][i_next] - color_program_[i][i_curr]) / count_color_[i]; 00092 } else 00093 cur_color_[i] += dcolor_[i]; 00094 update = true; 00095 } 00096 if (count_alpha_[i] > 0) { 00097 count_alpha_[i]--; 00098 // Transition to next alpha in program 00099 if (count_alpha_[i] == 0) { 00100 int i_curr = (ind_alpha_program_[i] + 1) % alpha_program_[i].size(); 00101 int i_next = (ind_alpha_program_[i] + 2) % alpha_program_[i].size(); 00102 ind_alpha_program_[i] = i_curr; 00103 cur_alpha_[i] = alpha_program_[i][i_curr]; 00104 count_alpha_[i] = ceil(alpha_time_program_[i][i_curr]/step_time_); 00105 dalpha_[i] = (alpha_program_[i][i_next] - alpha_program_[i][i_curr]) / count_alpha_[i]; 00106 } else 00107 cur_alpha_[i] += dalpha_[i]; 00108 update = true; 00109 } 00110 if (update) { 00111 updatePWMs(i); 00112 update = false; 00113 } 00114 } 00115 00116 } 00117 00118 void RGBA_LED::setColorProgram(vector<RGBA<float> > color_program, 00119 vector<float> time_program, bool fadeInto = false) { 00120 setColorProgram(color_program, time_program, 0, fadeInto); 00121 setColorProgram(color_program, time_program, 1, fadeInto); 00122 } 00123 00124 void RGBA_LED::setColorProgram(vector<RGBA<float> > color_program, 00125 vector<float> time_program, int stripID, bool fadeInto = false) { 00126 color_program_[stripID] = color_program; 00127 color_time_program_[stripID] = time_program; 00128 00129 // Begin transition to the first color, using default color fade time 00130 if (fadeInto) { 00131 ind_color_program_[stripID] = color_program.size()-1; 00132 count_color_[stripID] = ceil(def_color_fade_time_/step_time_); 00133 dcolor_[stripID] = (color_program[0] - cur_color_[stripID]) / count_color_[stripID]; 00134 00135 // Switch to first color, and let step() begin transition to next color 00136 } else { 00137 ind_color_program_[stripID] = 0; 00138 count_color_[stripID] = 1; 00139 cur_color_[stripID] = color_program[0]; 00140 updatePWMs(); 00141 } 00142 } 00143 00144 RGBA<float> RGBA_LED::getPresetColor(char colorID) { 00145 switch (colorID) { 00146 case 'w': return RGBA<float>(255, 255, 255, 0); // White 00147 case 'r': return RGBA<float>(255, 0, 0, 0); // Red 00148 case 'g': return RGBA<float>( 0, 255, 0, 0); // Green 00149 case 'b': return RGBA<float>( 0, 0, 255, 0); // Blue 00150 case 'y': return RGBA<float>(255, 255, 0, 0); // Yellow 00151 case 'c': return RGBA<float>( 0, 255, 255, 0); // Cyan 00152 case 'm': return RGBA<float>(255, 0, 255, 0); // Magenta 00153 default: return RGBA<float>(0, 0, 0, 0); 00154 // TODO: Add orange, purple 00155 } 00156 } 00157 00158 vector<RGBA<float> > RGBA_LED::getPresetColorProgram(int programID) { 00159 /*switch (colorID) { 00160 case 0: return RGBA<vector<float> >(getPresetColor('r'), getPresetColor('g'), getPresetColor('b')); 00161 default: return RGBA<vector<float> >(getPresetColor('w')); 00162 }*/ 00163 } 00164 00165 00166 void RGBA_LED::updatePWMs() { 00167 updatePWMs(0); 00168 updatePWMs(1); 00169 } 00170 00171 void RGBA_LED::updatePWMs(int stripID) { 00172 for (int i = 0; i < 4; i++) 00173 led_driver_->commandLEDBrightness(strip_leds_[stripID][i], (int) (cur_color_[stripID][i]*cur_alpha_[stripID])); 00174 }
Generated on Wed Jul 27 2022 01:17:15 by
