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

Dependents:   MAX32630FTHR_RGB

Committer:
j3
Date:
Tue Mar 28 22:33:51 2017 +0000
Revision:
2:ecd3840bb6a7
Parent:
0:434f7d7a11d8
Child:
3:327cc9243faf
reduced number of fxs and added Led enum

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 2:ecd3840bb6a7 36 m_redDc = 1.0F;
j3 2:ecd3840bb6a7 37 m_grnDc = 1.0F;
j3 2:ecd3840bb6a7 38 m_bluDc = 1.0F;
j3 0:434f7d7a11d8 39 }
j3 0:434f7d7a11d8 40 else
j3 0:434f7d7a11d8 41 {
j3 2:ecd3840bb6a7 42 m_redDc = 0.0F;
j3 2:ecd3840bb6a7 43 m_grnDc = 0.0F;
j3 2:ecd3840bb6a7 44 m_bluDc = 0.0F;
j3 0:434f7d7a11d8 45 }
j3 2:ecd3840bb6a7 46
j3 2:ecd3840bb6a7 47 m_red.write(m_redDc);
j3 2:ecd3840bb6a7 48 m_green.write(m_grnDc);
j3 2:ecd3840bb6a7 49 m_blue.write(m_bluDc);
j3 0:434f7d7a11d8 50 }
j3 0:434f7d7a11d8 51
j3 0:434f7d7a11d8 52
j3 0:434f7d7a11d8 53 /*****************************************************************************/
j3 0:434f7d7a11d8 54 MultipinRGB::~MultipinRGB()
j3 0:434f7d7a11d8 55 {
j3 0:434f7d7a11d8 56 //empty block
j3 0:434f7d7a11d8 57 }
j3 0:434f7d7a11d8 58
j3 0:434f7d7a11d8 59
j3 0:434f7d7a11d8 60 /*****************************************************************************/
j3 2:ecd3840bb6a7 61 void MultipinRGB::writeLed(const Led_e led, const float dc)
j3 0:434f7d7a11d8 62 {
j3 2:ecd3840bb6a7 63 switch(led)
j3 0:434f7d7a11d8 64 {
j3 2:ecd3840bb6a7 65 case(Red):
j3 2:ecd3840bb6a7 66 m_redDc = dc;
j3 2:ecd3840bb6a7 67 (m_ledActiveState == MultipinRGB::ActiveLow) ? m_red.write(1.0F - m_redDc) : m_red.write(m_redDc);
j3 2:ecd3840bb6a7 68 break;
j3 2:ecd3840bb6a7 69
j3 2:ecd3840bb6a7 70 case(Green):
j3 2:ecd3840bb6a7 71 m_grnDc = dc;
j3 2:ecd3840bb6a7 72 (m_ledActiveState == MultipinRGB::ActiveLow) ? m_green.write(1.0F - m_grnDc) : m_green.write(m_grnDc);
j3 2:ecd3840bb6a7 73 break;
j3 2:ecd3840bb6a7 74
j3 2:ecd3840bb6a7 75 case(Blue):
j3 2:ecd3840bb6a7 76 m_bluDc = dc;
j3 2:ecd3840bb6a7 77 (m_ledActiveState == MultipinRGB::ActiveLow) ? m_blue.write(1.0F - m_bluDc) : m_blue.write(m_bluDc);
j3 2:ecd3840bb6a7 78 break;
j3 2:ecd3840bb6a7 79
j3 2:ecd3840bb6a7 80 default:
j3 2:ecd3840bb6a7 81 mbed_die();
j3 2:ecd3840bb6a7 82 break;
j3 2:ecd3840bb6a7 83 };
j3 0:434f7d7a11d8 84 }
j3 0:434f7d7a11d8 85
j3 0:434f7d7a11d8 86
j3 0:434f7d7a11d8 87 /*****************************************************************************/
j3 2:ecd3840bb6a7 88 void MultipinRGB::writeLeds(const float r, const float g, const float b)
j3 0:434f7d7a11d8 89 {
j3 0:434f7d7a11d8 90 if(m_ledActiveState == MultipinRGB::ActiveLow)
j3 0:434f7d7a11d8 91 {
j3 2:ecd3840bb6a7 92 m_redDc = (1.0F - r);
j3 2:ecd3840bb6a7 93 m_grnDc = (1.0F - g);
j3 2:ecd3840bb6a7 94 m_bluDc = (1.0F - b);
j3 0:434f7d7a11d8 95 }
j3 0:434f7d7a11d8 96 else
j3 0:434f7d7a11d8 97 {
j3 2:ecd3840bb6a7 98 m_redDc = r;
j3 2:ecd3840bb6a7 99 m_grnDc = g;
j3 2:ecd3840bb6a7 100 m_bluDc = b;
j3 0:434f7d7a11d8 101 }
j3 2:ecd3840bb6a7 102
j3 2:ecd3840bb6a7 103 m_red.write(m_redDc);
j3 2:ecd3840bb6a7 104 m_green.write(m_grnDc);
j3 2:ecd3840bb6a7 105 m_blue.write(m_bluDc);
j3 0:434f7d7a11d8 106 }
j3 0:434f7d7a11d8 107
j3 0:434f7d7a11d8 108
j3 0:434f7d7a11d8 109 /*****************************************************************************/
j3 2:ecd3840bb6a7 110 float MultipinRGB::readLed(const Led_e led)
j3 0:434f7d7a11d8 111 {
j3 2:ecd3840bb6a7 112 float rtnVal;
j3 2:ecd3840bb6a7 113 switch(led)
j3 0:434f7d7a11d8 114 {
j3 2:ecd3840bb6a7 115 case(Red):
j3 2:ecd3840bb6a7 116 (m_ledActiveState == MultipinRGB::ActiveLow) ? (rtnVal = (1.0F - m_red.read())) : (rtnVal = m_red.read());
j3 2:ecd3840bb6a7 117 break;
j3 2:ecd3840bb6a7 118
j3 2:ecd3840bb6a7 119 case(Green):
j3 2:ecd3840bb6a7 120 (m_ledActiveState == MultipinRGB::ActiveLow) ? (rtnVal = (1.0F - m_green.read())) : (rtnVal = m_green.read());
j3 2:ecd3840bb6a7 121 break;
j3 2:ecd3840bb6a7 122
j3 2:ecd3840bb6a7 123 case(Blue):
j3 2:ecd3840bb6a7 124 (m_ledActiveState == MultipinRGB::ActiveLow) ? (rtnVal = (1.0F - m_blue.read())) : (rtnVal = m_blue.read());
j3 2:ecd3840bb6a7 125 break;
j3 2:ecd3840bb6a7 126
j3 2:ecd3840bb6a7 127 default:
j3 2:ecd3840bb6a7 128 mbed_die();
j3 2:ecd3840bb6a7 129 break;
j3 2:ecd3840bb6a7 130 };
j3 2:ecd3840bb6a7 131
j3 2:ecd3840bb6a7 132 return rtnVal;
j3 0:434f7d7a11d8 133 }
j3 0:434f7d7a11d8 134
j3 0:434f7d7a11d8 135
j3 0:434f7d7a11d8 136 /*****************************************************************************/
j3 2:ecd3840bb6a7 137 void MultipinRGB::readLeds(float& r, float& g, float& b)
j3 0:434f7d7a11d8 138 {
j3 0:434f7d7a11d8 139 if(m_ledActiveState == MultipinRGB::ActiveLow)
j3 0:434f7d7a11d8 140 {
j3 0:434f7d7a11d8 141 r = (1.0F - m_red.read());
j3 0:434f7d7a11d8 142 g = (1.0F - m_green.read());
j3 0:434f7d7a11d8 143 b = (1.0F - m_blue.read());
j3 0:434f7d7a11d8 144 }
j3 0:434f7d7a11d8 145 else
j3 0:434f7d7a11d8 146 {
j3 0:434f7d7a11d8 147 r = m_red.read();
j3 0:434f7d7a11d8 148 g = m_green.read();
j3 0:434f7d7a11d8 149 b = m_blue.read();
j3 0:434f7d7a11d8 150 }
j3 0:434f7d7a11d8 151 }
j3 2:ecd3840bb6a7 152
j3 2:ecd3840bb6a7 153
j3 2:ecd3840bb6a7 154 /*****************************************************************************/
j3 2:ecd3840bb6a7 155 void MultipinRGB::setPeriod(const float p)
j3 2:ecd3840bb6a7 156 {
j3 2:ecd3840bb6a7 157 m_red.period(p);
j3 2:ecd3840bb6a7 158 m_green.period(p);
j3 2:ecd3840bb6a7 159 m_blue.period(p);
j3 2:ecd3840bb6a7 160 }