Library for multi-pin RGB leds that encapsulates three PwmOut objects.
Diff: MultipinRGB.cpp
- Revision:
- 3:327cc9243faf
- Parent:
- 2:ecd3840bb6a7
--- a/MultipinRGB.cpp Tue Mar 28 22:33:51 2017 +0000 +++ b/MultipinRGB.cpp Tue Mar 28 23:24:17 2017 +0000 @@ -33,20 +33,18 @@ //turn off all leds, use default period if(m_ledActiveState == MultipinRGB::ActiveLow) { - m_redDc = 1.0F; - m_grnDc = 1.0F; - m_bluDc = 1.0F; + m_red.write(1.0F); + m_green.write(1.0F); + m_blue.write(1.0F); } else { - m_redDc = 0.0F; - m_grnDc = 0.0F; - m_bluDc = 0.0F; + m_red.write(0.0F); + m_green.write(0.0F); + m_blue.write(0.0F); } - m_red.write(m_redDc); - m_green.write(m_grnDc); - m_blue.write(m_bluDc); + } @@ -63,18 +61,21 @@ switch(led) { case(Red): - m_redDc = dc; - (m_ledActiveState == MultipinRGB::ActiveLow) ? m_red.write(1.0F - m_redDc) : m_red.write(m_redDc); + //if + (m_ledActiveState == MultipinRGB::ActiveLow) ? + m_red.write(1.0F - dc) : m_red.write(dc); break; case(Green): - m_grnDc = dc; - (m_ledActiveState == MultipinRGB::ActiveLow) ? m_green.write(1.0F - m_grnDc) : m_green.write(m_grnDc); + //if + (m_ledActiveState == MultipinRGB::ActiveLow) ? + m_green.write(1.0F - dc) : m_green.write(dc); break; case(Blue): - m_bluDc = dc; - (m_ledActiveState == MultipinRGB::ActiveLow) ? m_blue.write(1.0F - m_bluDc) : m_blue.write(m_bluDc); + //if + (m_ledActiveState == MultipinRGB::ActiveLow) ? + m_blue.write(1.0F - dc) : m_blue.write(dc); break; default: @@ -89,20 +90,16 @@ { if(m_ledActiveState == MultipinRGB::ActiveLow) { - m_redDc = (1.0F - r); - m_grnDc = (1.0F - g); - m_bluDc = (1.0F - b); + m_red.write(1.0F - r); + m_green.write(1.0F - g); + m_blue.write(1.0F - b); } else { - m_redDc = r; - m_grnDc = g; - m_bluDc = b; + m_red.write(r); + m_green.write(g); + m_blue.write(b); } - - m_red.write(m_redDc); - m_green.write(m_grnDc); - m_blue.write(m_bluDc); } @@ -113,15 +110,21 @@ switch(led) { case(Red): - (m_ledActiveState == MultipinRGB::ActiveLow) ? (rtnVal = (1.0F - m_red.read())) : (rtnVal = m_red.read()); + //if + (m_ledActiveState == MultipinRGB::ActiveLow) ? + (rtnVal = (1.0F - m_red.read())) : (rtnVal = m_red.read()); break; case(Green): - (m_ledActiveState == MultipinRGB::ActiveLow) ? (rtnVal = (1.0F - m_green.read())) : (rtnVal = m_green.read()); + //if + (m_ledActiveState == MultipinRGB::ActiveLow) ? + (rtnVal = (1.0F - m_green.read())) : (rtnVal = m_green.read()); break; case(Blue): - (m_ledActiveState == MultipinRGB::ActiveLow) ? (rtnVal = (1.0F - m_blue.read())) : (rtnVal = m_blue.read()); + //if + (m_ledActiveState == MultipinRGB::ActiveLow) ? + (rtnVal = (1.0F - m_blue.read())) : (rtnVal = m_blue.read()); break; default: @@ -152,6 +155,64 @@ /*****************************************************************************/ +void MultipinRGB::toggleLed(const Led_e led) +{ + float currentDc, newDc; + + switch(led) + { + case(Red): + currentDc = m_red.read(); + break; + + case(Green): + currentDc = m_green.read(); + break; + + case(Blue): + currentDc = m_blue.read(); + break; + + default: + mbed_die(); + break; + }; + + if(currentDc >= 1.0F) + { + newDc = 0.0F; + } + else if(currentDc <= 0.0F) + { + newDc = 1.0F; + } + else + { + newDc = (m_ledActiveState == MultipinRGB::ActiveLow) ? 1.0F : 0.0F; + } + + switch(led) + { + case(Red): + m_red.write(newDc); + break; + + case(Green): + m_green.write(newDc); + break; + + case(Blue): + m_blue.write(newDc); + break; + + default: + mbed_die(); + break; + }; +} + + +/*****************************************************************************/ void MultipinRGB::setPeriod(const float p) { m_red.period(p);