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

Dependents:   MAX32630FTHR_RGB

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);