A project that aims at making a LED based light system controlled by microcontroller and with BLE (soon) with smooth color transitions.
LEDManager.h@3:25af55580ef6, 2018-02-13 (annotated)
- Committer:
- ledonger
- Date:
- Tue Feb 13 15:36:17 2018 +0000
- Revision:
- 3:25af55580ef6
- Parent:
- 2:0bbd4fc5e202
FlowerColor : small program to manage led fade in fade out with pwm generation (not from pwm output)
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ledonger | 0:b350f8395bff | 1 | #ifndef LEDMANAGER_H |
ledonger | 0:b350f8395bff | 2 | #define LEDMANAGER_H |
ledonger | 0:b350f8395bff | 3 | |
ledonger | 0:b350f8395bff | 4 | #include "mbed.h" |
ledonger | 0:b350f8395bff | 5 | |
ledonger | 0:b350f8395bff | 6 | class LEDManager |
ledonger | 0:b350f8395bff | 7 | { |
ledonger | 0:b350f8395bff | 8 | public: |
ledonger | 0:b350f8395bff | 9 | LEDManager(PinName pin, int period_us) |
ledonger | 0:b350f8395bff | 10 | { |
ledonger | 0:b350f8395bff | 11 | this->io = new DigitalOut(pin); |
ledonger | 0:b350f8395bff | 12 | this->period_us = period_us; |
ledonger | 0:b350f8395bff | 13 | this->prevUpdate = 0; |
ledonger | 0:b350f8395bff | 14 | this->highTime = this->period_us*0.5; |
ledonger | 0:b350f8395bff | 15 | this->lowTime = this->period_us - this->highTime; |
ledonger | 0:b350f8395bff | 16 | this->fadeFactor = 100; |
ledonger | 0:b350f8395bff | 17 | this->situation = 1; |
ledonger | 3:25af55580ef6 | 18 | this->fadeUpdatePeriod = 40000; |
ledonger | 2:0bbd4fc5e202 | 19 | this->prevFadeUpdate = 0; |
ledonger | 3:25af55580ef6 | 20 | this->isActive = true; |
ledonger | 0:b350f8395bff | 21 | } |
ledonger | 0:b350f8395bff | 22 | |
ledonger | 0:b350f8395bff | 23 | LEDManager(DigitalOut *io, int period_us) |
ledonger | 0:b350f8395bff | 24 | { |
ledonger | 0:b350f8395bff | 25 | this->io = io; |
ledonger | 0:b350f8395bff | 26 | this->period_us = period_us; |
ledonger | 0:b350f8395bff | 27 | this->prevUpdate = 0; |
ledonger | 0:b350f8395bff | 28 | this->highTime = this->period_us*0.5; |
ledonger | 0:b350f8395bff | 29 | this->lowTime = this->period_us - this->highTime; |
ledonger | 0:b350f8395bff | 30 | this->fadeFactor = 100; |
ledonger | 0:b350f8395bff | 31 | this->situation = 1; |
ledonger | 0:b350f8395bff | 32 | this->fadeUpdatePeriod = 10000; |
ledonger | 0:b350f8395bff | 33 | } |
ledonger | 0:b350f8395bff | 34 | |
ledonger | 0:b350f8395bff | 35 | void processLED(int time) |
ledonger | 0:b350f8395bff | 36 | { |
ledonger | 3:25af55580ef6 | 37 | if(!this->isActive) |
ledonger | 3:25af55580ef6 | 38 | { |
ledonger | 3:25af55580ef6 | 39 | return; |
ledonger | 3:25af55580ef6 | 40 | } |
ledonger | 0:b350f8395bff | 41 | if(situation == 1){ |
ledonger | 0:b350f8395bff | 42 | if((time - prevUpdate) < highTime){ |
ledonger | 0:b350f8395bff | 43 | io->write(1); |
ledonger | 0:b350f8395bff | 44 | } |
ledonger | 0:b350f8395bff | 45 | else{ |
ledonger | 0:b350f8395bff | 46 | situation = 2; |
ledonger | 0:b350f8395bff | 47 | prevUpdate = time; |
ledonger | 0:b350f8395bff | 48 | } |
ledonger | 0:b350f8395bff | 49 | } |
ledonger | 0:b350f8395bff | 50 | if(situation == 2){ |
ledonger | 0:b350f8395bff | 51 | if((time - prevUpdate) < lowTime){ |
ledonger | 0:b350f8395bff | 52 | io->write(0); |
ledonger | 0:b350f8395bff | 53 | } |
ledonger | 0:b350f8395bff | 54 | else{ |
ledonger | 0:b350f8395bff | 55 | situation = 1; |
ledonger | 0:b350f8395bff | 56 | prevUpdate = time; |
ledonger | 0:b350f8395bff | 57 | } |
ledonger | 0:b350f8395bff | 58 | } |
ledonger | 0:b350f8395bff | 59 | |
ledonger | 0:b350f8395bff | 60 | |
ledonger | 0:b350f8395bff | 61 | if(time - prevFadeUpdate > fadeUpdatePeriod){ |
ledonger | 0:b350f8395bff | 62 | highTime = highTime + fadeFactor; |
ledonger | 0:b350f8395bff | 63 | lowTime = period_us - highTime; |
ledonger | 0:b350f8395bff | 64 | if(highTime >= period_us){ |
ledonger | 0:b350f8395bff | 65 | fadeFactor = -fadeFactor; |
ledonger | 0:b350f8395bff | 66 | } |
ledonger | 0:b350f8395bff | 67 | else if(highTime <= 0){ |
ledonger | 0:b350f8395bff | 68 | fadeFactor = -fadeFactor; |
ledonger | 0:b350f8395bff | 69 | } |
ledonger | 0:b350f8395bff | 70 | prevFadeUpdate = time; |
ledonger | 0:b350f8395bff | 71 | } |
ledonger | 0:b350f8395bff | 72 | } |
ledonger | 0:b350f8395bff | 73 | |
ledonger | 3:25af55580ef6 | 74 | void setFadeUpdatePeriod(int period){ this->fadeUpdatePeriod = period;} |
ledonger | 3:25af55580ef6 | 75 | int getFadeUpdatePeriod(){ return this->fadeUpdatePeriod;} |
ledonger | 3:25af55580ef6 | 76 | void setFadeFactor(int fadeFactor){ this->fadeFactor = fadeFactor;} |
ledonger | 3:25af55580ef6 | 77 | int getFadeFactor(){ return this->fadeFactor;} |
ledonger | 3:25af55580ef6 | 78 | int getHighTime(){ return this->highTime;} |
ledonger | 3:25af55580ef6 | 79 | void setActive(bool state){ this->isActive = state;} |
ledonger | 3:25af55580ef6 | 80 | bool getActiveness(){ return this->isActive;} |
ledonger | 3:25af55580ef6 | 81 | |
ledonger | 0:b350f8395bff | 82 | |
ledonger | 0:b350f8395bff | 83 | private: |
ledonger | 0:b350f8395bff | 84 | DigitalOut *io; |
ledonger | 0:b350f8395bff | 85 | int period_us; |
ledonger | 0:b350f8395bff | 86 | int prevUpdate; |
ledonger | 0:b350f8395bff | 87 | int highTime; |
ledonger | 0:b350f8395bff | 88 | int lowTime; |
ledonger | 0:b350f8395bff | 89 | int situation; |
ledonger | 0:b350f8395bff | 90 | |
ledonger | 0:b350f8395bff | 91 | int prevFadeUpdate; |
ledonger | 0:b350f8395bff | 92 | int fadeFactor; |
ledonger | 0:b350f8395bff | 93 | int fadeUpdatePeriod; |
ledonger | 3:25af55580ef6 | 94 | bool isActive; |
ledonger | 0:b350f8395bff | 95 | }; |
ledonger | 0:b350f8395bff | 96 | |
ledonger | 0:b350f8395bff | 97 | #endif |