Library for multi-pin RGB leds that encapsulates three PwmOut objects.

Dependents:   MAX32630FTHR_RGB

Committer:
j3
Date:
Tue Mar 28 23:24:17 2017 +0000
Revision:
3:327cc9243faf
Parent:
2:ecd3840bb6a7
added toggle fx

Who changed what in which revision?

UserRevisionLine numberNew contents of line
j3 0:434f7d7a11d8 1 /******************************************************************************
j3 0:434f7d7a11d8 2 * MIT License
j3 0:434f7d7a11d8 3 *
j3 0:434f7d7a11d8 4 * Copyright (c) 2017 Justin J. Jordan
j3 0:434f7d7a11d8 5 *
j3 0:434f7d7a11d8 6 * Permission is hereby granted, free of charge, to any person obtaining a copy
j3 0:434f7d7a11d8 7 * of this software and associated documentation files (the "Software"), to deal
j3 0:434f7d7a11d8 8 * in the Software without restriction, including without limitation the rights
j3 0:434f7d7a11d8 9 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
j3 0:434f7d7a11d8 10 * copies of the Software, and to permit persons to whom the Software is
j3 0:434f7d7a11d8 11 * furnished to do so, subject to the following conditions:
j3 0:434f7d7a11d8 12
j3 0:434f7d7a11d8 13 * The above copyright notice and this permission notice shall be included in all
j3 0:434f7d7a11d8 14 * copies or substantial portions of the Software.
j3 0:434f7d7a11d8 15
j3 0:434f7d7a11d8 16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
j3 0:434f7d7a11d8 17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
j3 0:434f7d7a11d8 18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
j3 0:434f7d7a11d8 19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
j3 0:434f7d7a11d8 20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
j3 0:434f7d7a11d8 21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
j3 0:434f7d7a11d8 22 * SOFTWARE.
j3 0:434f7d7a11d8 23 ******************************************************************************/
j3 0:434f7d7a11d8 24
j3 0:434f7d7a11d8 25
j3 0:434f7d7a11d8 26 #include "MultipinRGB.h"
j3 0:434f7d7a11d8 27
j3 0:434f7d7a11d8 28
j3 0:434f7d7a11d8 29 /*****************************************************************************/
j3 0:434f7d7a11d8 30 MultipinRGB::MultipinRGB(PinName red, PinName green, PinName blue, LedLogic_e activeState):
j3 0:434f7d7a11d8 31 m_red(red), m_green(green), m_blue(blue), m_ledActiveState(activeState)
j3 0:434f7d7a11d8 32 {
j3 0:434f7d7a11d8 33 //turn off all leds, use default period
j3 0:434f7d7a11d8 34 if(m_ledActiveState == MultipinRGB::ActiveLow)
j3 0:434f7d7a11d8 35 {
j3 3:327cc9243faf 36 m_red.write(1.0F);
j3 3:327cc9243faf 37 m_green.write(1.0F);
j3 3:327cc9243faf 38 m_blue.write(1.0F);
j3 0:434f7d7a11d8 39 }
j3 0:434f7d7a11d8 40 else
j3 0:434f7d7a11d8 41 {
j3 3:327cc9243faf 42 m_red.write(0.0F);
j3 3:327cc9243faf 43 m_green.write(0.0F);
j3 3:327cc9243faf 44 m_blue.write(0.0F);
j3 0:434f7d7a11d8 45 }
j3 2:ecd3840bb6a7 46
j3 3:327cc9243faf 47
j3 0:434f7d7a11d8 48 }
j3 0:434f7d7a11d8 49
j3 0:434f7d7a11d8 50
j3 0:434f7d7a11d8 51 /*****************************************************************************/
j3 0:434f7d7a11d8 52 MultipinRGB::~MultipinRGB()
j3 0:434f7d7a11d8 53 {
j3 0:434f7d7a11d8 54 //empty block
j3 0:434f7d7a11d8 55 }
j3 0:434f7d7a11d8 56
j3 0:434f7d7a11d8 57
j3 0:434f7d7a11d8 58 /*****************************************************************************/
j3 2:ecd3840bb6a7 59 void MultipinRGB::writeLed(const Led_e led, const float dc)
j3 0:434f7d7a11d8 60 {
j3 2:ecd3840bb6a7 61 switch(led)
j3 0:434f7d7a11d8 62 {
j3 2:ecd3840bb6a7 63 case(Red):
j3 3:327cc9243faf 64 //if
j3 3:327cc9243faf 65 (m_ledActiveState == MultipinRGB::ActiveLow) ?
j3 3:327cc9243faf 66 m_red.write(1.0F - dc) : m_red.write(dc);
j3 2:ecd3840bb6a7 67 break;
j3 2:ecd3840bb6a7 68
j3 2:ecd3840bb6a7 69 case(Green):
j3 3:327cc9243faf 70 //if
j3 3:327cc9243faf 71 (m_ledActiveState == MultipinRGB::ActiveLow) ?
j3 3:327cc9243faf 72 m_green.write(1.0F - dc) : m_green.write(dc);
j3 2:ecd3840bb6a7 73 break;
j3 2:ecd3840bb6a7 74
j3 2:ecd3840bb6a7 75 case(Blue):
j3 3:327cc9243faf 76 //if
j3 3:327cc9243faf 77 (m_ledActiveState == MultipinRGB::ActiveLow) ?
j3 3:327cc9243faf 78 m_blue.write(1.0F - dc) : m_blue.write(dc);
j3 2:ecd3840bb6a7 79 break;
j3 2:ecd3840bb6a7 80
j3 2:ecd3840bb6a7 81 default:
j3 2:ecd3840bb6a7 82 mbed_die();
j3 2:ecd3840bb6a7 83 break;
j3 2:ecd3840bb6a7 84 };
j3 0:434f7d7a11d8 85 }
j3 0:434f7d7a11d8 86
j3 0:434f7d7a11d8 87
j3 0:434f7d7a11d8 88 /*****************************************************************************/
j3 2:ecd3840bb6a7 89 void MultipinRGB::writeLeds(const float r, const float g, const float b)
j3 0:434f7d7a11d8 90 {
j3 0:434f7d7a11d8 91 if(m_ledActiveState == MultipinRGB::ActiveLow)
j3 0:434f7d7a11d8 92 {
j3 3:327cc9243faf 93 m_red.write(1.0F - r);
j3 3:327cc9243faf 94 m_green.write(1.0F - g);
j3 3:327cc9243faf 95 m_blue.write(1.0F - b);
j3 0:434f7d7a11d8 96 }
j3 0:434f7d7a11d8 97 else
j3 0:434f7d7a11d8 98 {
j3 3:327cc9243faf 99 m_red.write(r);
j3 3:327cc9243faf 100 m_green.write(g);
j3 3:327cc9243faf 101 m_blue.write(b);
j3 0:434f7d7a11d8 102 }
j3 0:434f7d7a11d8 103 }
j3 0:434f7d7a11d8 104
j3 0:434f7d7a11d8 105
j3 0:434f7d7a11d8 106 /*****************************************************************************/
j3 2:ecd3840bb6a7 107 float MultipinRGB::readLed(const Led_e led)
j3 0:434f7d7a11d8 108 {
j3 2:ecd3840bb6a7 109 float rtnVal;
j3 2:ecd3840bb6a7 110 switch(led)
j3 0:434f7d7a11d8 111 {
j3 2:ecd3840bb6a7 112 case(Red):
j3 3:327cc9243faf 113 //if
j3 3:327cc9243faf 114 (m_ledActiveState == MultipinRGB::ActiveLow) ?
j3 3:327cc9243faf 115 (rtnVal = (1.0F - m_red.read())) : (rtnVal = m_red.read());
j3 2:ecd3840bb6a7 116 break;
j3 2:ecd3840bb6a7 117
j3 2:ecd3840bb6a7 118 case(Green):
j3 3:327cc9243faf 119 //if
j3 3:327cc9243faf 120 (m_ledActiveState == MultipinRGB::ActiveLow) ?
j3 3:327cc9243faf 121 (rtnVal = (1.0F - m_green.read())) : (rtnVal = m_green.read());
j3 2:ecd3840bb6a7 122 break;
j3 2:ecd3840bb6a7 123
j3 2:ecd3840bb6a7 124 case(Blue):
j3 3:327cc9243faf 125 //if
j3 3:327cc9243faf 126 (m_ledActiveState == MultipinRGB::ActiveLow) ?
j3 3:327cc9243faf 127 (rtnVal = (1.0F - m_blue.read())) : (rtnVal = m_blue.read());
j3 2:ecd3840bb6a7 128 break;
j3 2:ecd3840bb6a7 129
j3 2:ecd3840bb6a7 130 default:
j3 2:ecd3840bb6a7 131 mbed_die();
j3 2:ecd3840bb6a7 132 break;
j3 2:ecd3840bb6a7 133 };
j3 2:ecd3840bb6a7 134
j3 2:ecd3840bb6a7 135 return rtnVal;
j3 0:434f7d7a11d8 136 }
j3 0:434f7d7a11d8 137
j3 0:434f7d7a11d8 138
j3 0:434f7d7a11d8 139 /*****************************************************************************/
j3 2:ecd3840bb6a7 140 void MultipinRGB::readLeds(float& r, float& g, float& b)
j3 0:434f7d7a11d8 141 {
j3 0:434f7d7a11d8 142 if(m_ledActiveState == MultipinRGB::ActiveLow)
j3 0:434f7d7a11d8 143 {
j3 0:434f7d7a11d8 144 r = (1.0F - m_red.read());
j3 0:434f7d7a11d8 145 g = (1.0F - m_green.read());
j3 0:434f7d7a11d8 146 b = (1.0F - m_blue.read());
j3 0:434f7d7a11d8 147 }
j3 0:434f7d7a11d8 148 else
j3 0:434f7d7a11d8 149 {
j3 0:434f7d7a11d8 150 r = m_red.read();
j3 0:434f7d7a11d8 151 g = m_green.read();
j3 0:434f7d7a11d8 152 b = m_blue.read();
j3 0:434f7d7a11d8 153 }
j3 0:434f7d7a11d8 154 }
j3 2:ecd3840bb6a7 155
j3 2:ecd3840bb6a7 156
j3 2:ecd3840bb6a7 157 /*****************************************************************************/
j3 3:327cc9243faf 158 void MultipinRGB::toggleLed(const Led_e led)
j3 3:327cc9243faf 159 {
j3 3:327cc9243faf 160 float currentDc, newDc;
j3 3:327cc9243faf 161
j3 3:327cc9243faf 162 switch(led)
j3 3:327cc9243faf 163 {
j3 3:327cc9243faf 164 case(Red):
j3 3:327cc9243faf 165 currentDc = m_red.read();
j3 3:327cc9243faf 166 break;
j3 3:327cc9243faf 167
j3 3:327cc9243faf 168 case(Green):
j3 3:327cc9243faf 169 currentDc = m_green.read();
j3 3:327cc9243faf 170 break;
j3 3:327cc9243faf 171
j3 3:327cc9243faf 172 case(Blue):
j3 3:327cc9243faf 173 currentDc = m_blue.read();
j3 3:327cc9243faf 174 break;
j3 3:327cc9243faf 175
j3 3:327cc9243faf 176 default:
j3 3:327cc9243faf 177 mbed_die();
j3 3:327cc9243faf 178 break;
j3 3:327cc9243faf 179 };
j3 3:327cc9243faf 180
j3 3:327cc9243faf 181 if(currentDc >= 1.0F)
j3 3:327cc9243faf 182 {
j3 3:327cc9243faf 183 newDc = 0.0F;
j3 3:327cc9243faf 184 }
j3 3:327cc9243faf 185 else if(currentDc <= 0.0F)
j3 3:327cc9243faf 186 {
j3 3:327cc9243faf 187 newDc = 1.0F;
j3 3:327cc9243faf 188 }
j3 3:327cc9243faf 189 else
j3 3:327cc9243faf 190 {
j3 3:327cc9243faf 191 newDc = (m_ledActiveState == MultipinRGB::ActiveLow) ? 1.0F : 0.0F;
j3 3:327cc9243faf 192 }
j3 3:327cc9243faf 193
j3 3:327cc9243faf 194 switch(led)
j3 3:327cc9243faf 195 {
j3 3:327cc9243faf 196 case(Red):
j3 3:327cc9243faf 197 m_red.write(newDc);
j3 3:327cc9243faf 198 break;
j3 3:327cc9243faf 199
j3 3:327cc9243faf 200 case(Green):
j3 3:327cc9243faf 201 m_green.write(newDc);
j3 3:327cc9243faf 202 break;
j3 3:327cc9243faf 203
j3 3:327cc9243faf 204 case(Blue):
j3 3:327cc9243faf 205 m_blue.write(newDc);
j3 3:327cc9243faf 206 break;
j3 3:327cc9243faf 207
j3 3:327cc9243faf 208 default:
j3 3:327cc9243faf 209 mbed_die();
j3 3:327cc9243faf 210 break;
j3 3:327cc9243faf 211 };
j3 3:327cc9243faf 212 }
j3 3:327cc9243faf 213
j3 3:327cc9243faf 214
j3 3:327cc9243faf 215 /*****************************************************************************/
j3 2:ecd3840bb6a7 216 void MultipinRGB::setPeriod(const float p)
j3 2:ecd3840bb6a7 217 {
j3 2:ecd3840bb6a7 218 m_red.period(p);
j3 2:ecd3840bb6a7 219 m_green.period(p);
j3 2:ecd3840bb6a7 220 m_blue.period(p);
j3 2:ecd3840bb6a7 221 }