A project that aims at making a LED based light system controlled by microcontroller and with BLE (soon) with smooth color transitions.

Dependencies:   mbed

Revision:
0:b350f8395bff
Child:
2:0bbd4fc5e202
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/LEDManager.h	Fri Aug 18 08:39:43 2017 +0000
@@ -0,0 +1,90 @@
+#ifndef LEDMANAGER_H
+#define LEDMANAGER_H
+
+#include "mbed.h"
+
+class LEDManager
+{
+    public:
+        LEDManager(PinName pin, int period_us)
+        {
+            this->io = new DigitalOut(pin);
+            this->period_us = period_us;
+            this->prevUpdate = 0;
+            this->highTime = this->period_us*0.5;
+            this->lowTime = this->period_us - this->highTime;
+            this->fadeFactor = 100;
+            this->situation = 1;
+            this->fadeUpdatePeriod = 10000;   
+        }
+        
+        LEDManager(DigitalOut *io, int period_us)
+        {
+            this->io = io;
+            this->period_us = period_us;
+            this->prevUpdate = 0;
+            this->highTime = this->period_us*0.5;
+            this->lowTime = this->period_us - this->highTime;
+            this->fadeFactor = 100;
+            this->situation = 1;
+            this->fadeUpdatePeriod = 10000;   
+        }
+        
+        void processLED(int time)
+        {
+            if(situation == 1){
+                if((time - prevUpdate) < highTime){
+                    io->write(1);
+                }
+                else{
+                    situation = 2;
+                    prevUpdate = time;
+                }
+            }
+            if(situation == 2){
+                if((time - prevUpdate) < lowTime){
+                    io->write(0);
+                } 
+                else{
+                    situation = 1;   
+                    prevUpdate = time;
+                }  
+            }
+            
+            
+            if(time - prevFadeUpdate > fadeUpdatePeriod){
+                highTime = highTime + fadeFactor;
+                lowTime = period_us - highTime;
+                if(highTime >= period_us){
+                    fadeFactor = -fadeFactor;   
+                }
+                else if(highTime <= 0){
+                    fadeFactor = -fadeFactor;
+                }
+                prevFadeUpdate = time;
+            }
+        }
+        
+        /*void setFadeUpdatePeriod(int period)
+        {
+            this->fadeUpdatePeriod = period;   
+        }
+        void setFadeFactor(int fadeFactor)
+        {
+            this->fadeFactor = fadeFactor;   
+        }*/
+        
+    private:
+        DigitalOut *io;
+        int period_us;
+        int prevUpdate;
+        int highTime;
+        int lowTime;
+        int situation;
+        
+        int prevFadeUpdate;
+        int fadeFactor;
+        int fadeUpdatePeriod;
+};
+
+#endif