add rgbled.cpp .h
This commit is contained in:
150
rgbled.cpp
Normal file
150
rgbled.cpp
Normal file
@ -0,0 +1,150 @@
|
||||
#include "rgbled.h"
|
||||
|
||||
RgbLed::RgbLed( Pwm8b* pwmA, Pwm8b* pwmB ): _pwmA(pwmA), _pwmB(pwmB) {}
|
||||
|
||||
void RgbLed::setSolidColor( const uint8_t r, const uint8_t g, const uint8_t b)
|
||||
{
|
||||
_pattern=0;
|
||||
_pwmA->setDutyA(g);
|
||||
_pwmA->setDutyB(r);
|
||||
_pwmB->setDutyB(b);
|
||||
r+b+g == 0 ? off() : on();
|
||||
}
|
||||
|
||||
void RgbLed::setPreset( const uint8_t preset)
|
||||
{
|
||||
|
||||
switch (preset)
|
||||
{
|
||||
//whites
|
||||
case 1:
|
||||
setSolidColor( 160,255,80 ); //neutral white
|
||||
break;
|
||||
case 2:
|
||||
setSolidColor( 200,255,20 ); //Warm white
|
||||
break;
|
||||
case 3:
|
||||
setSolidColor( 180,255,140 ); //cold white
|
||||
break;
|
||||
//reds
|
||||
case 4:
|
||||
setSolidColor( 255,0,0 ); //red
|
||||
break;
|
||||
case 5:
|
||||
setSolidColor( 255,60,10 ); //ruby
|
||||
break;
|
||||
case 6:
|
||||
setSolidColor( 255,30,30 ); //pink
|
||||
break;
|
||||
case 7:
|
||||
setSolidColor( 255,155,0 ); //orange
|
||||
break;
|
||||
//greens
|
||||
case 8:
|
||||
setSolidColor( 0,255,0 ); //green
|
||||
break;
|
||||
case 9:
|
||||
setSolidColor( 55,255,10 ); //poison
|
||||
break;
|
||||
case 10:
|
||||
setSolidColor( 0,255,0 ); //green
|
||||
break;
|
||||
case 11:
|
||||
setSolidColor( 8,80,7 ); //mint
|
||||
break;
|
||||
//blues
|
||||
case 12:
|
||||
setSolidColor( 0,0,255 ); //blue
|
||||
break;
|
||||
case 13:
|
||||
setSolidColor( 50,255,255 ); //sky
|
||||
break;
|
||||
case 14:
|
||||
setSolidColor( 10,80,150 ); //ocean
|
||||
break;
|
||||
case 15:
|
||||
setSolidColor( 0,255,220 ); //turqouse
|
||||
break;
|
||||
//strange yellow color color
|
||||
case 16:
|
||||
setSolidColor( 200,255,0 );
|
||||
break;
|
||||
default:
|
||||
setSolidColor( 255,055,20 );
|
||||
}
|
||||
}
|
||||
|
||||
void RgbLed::setPattern(const uint8_t id)
|
||||
{
|
||||
_pattern=id;
|
||||
if( id != 0 )
|
||||
{
|
||||
on();
|
||||
_stroke = false;
|
||||
_counter = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void RgbLed::on()
|
||||
{
|
||||
_pwmA->on();
|
||||
_pwmB->on();
|
||||
}
|
||||
|
||||
void RgbLed::off()
|
||||
{
|
||||
_pwmA->off();
|
||||
_pwmB->off();
|
||||
}
|
||||
|
||||
void RgbLed::patternStep()
|
||||
{
|
||||
if(_pattern == 1)
|
||||
{
|
||||
if(!_stroke)_counter++;
|
||||
else _counter --;
|
||||
if(_counter == 255) _stroke = true;
|
||||
else if(_counter == 0) _stroke = false;
|
||||
_pwmA->setDutyB(_counter);
|
||||
_pwmA->setDutyA(255-_counter);
|
||||
_pwmB->setDutyB(_counter-64);
|
||||
}
|
||||
else if(_pattern == 2)
|
||||
{
|
||||
if(!_stroke)_counter++;
|
||||
else _counter --;
|
||||
if(_counter == 255 << 1) _stroke = true;
|
||||
else if(_counter == 0) _stroke = false;
|
||||
_pwmA->setDutyB(_counter >> 1);
|
||||
_pwmA->setDutyA(0);
|
||||
_pwmB->setDutyB(0);
|
||||
}
|
||||
else if(_pattern == 3)
|
||||
{
|
||||
if(!_stroke)_counter++;
|
||||
else _counter --;
|
||||
if(_counter == 255 << 8) _stroke = true;
|
||||
else if(_counter == 0) _stroke = false;
|
||||
_pwmA->setDutyB(_counter >> 6);
|
||||
_pwmA->setDutyA(_counter >> 8);
|
||||
_pwmB->setDutyB(_counter >> 3);
|
||||
}
|
||||
}
|
||||
|
||||
void RgbLed::logic()
|
||||
{
|
||||
patternStep();
|
||||
}
|
||||
|
||||
uint8_t RgbLed::getR()
|
||||
{
|
||||
return OCR0A;
|
||||
}
|
||||
uint8_t RgbLed::getB()
|
||||
{
|
||||
return OCR0B;
|
||||
}
|
||||
uint8_t RgbLed::getG()
|
||||
{
|
||||
return OCR2B;
|
||||
}
|
32
rgbled.h
Normal file
32
rgbled.h
Normal file
@ -0,0 +1,32 @@
|
||||
#include "pwm.h"
|
||||
|
||||
class RgbLed
|
||||
{
|
||||
private:
|
||||
Pwm8b* _pwmA;
|
||||
Pwm8b* _pwmB;
|
||||
|
||||
uint8_t _pattern = 0;
|
||||
|
||||
uint16_t _counter = 0;
|
||||
bool _stroke = false;
|
||||
|
||||
|
||||
void patternStep();
|
||||
|
||||
public:
|
||||
RgbLed( Pwm8b* pwmA, Pwm8b* pwmB );
|
||||
|
||||
void setSolidColor( const uint8_t r, const uint8_t g, const uint8_t b);
|
||||
void setPattern(const uint8_t id);
|
||||
void setPreset( const uint8_t preset);
|
||||
|
||||
void on();
|
||||
void off();
|
||||
|
||||
void logic();
|
||||
uint8_t getR();
|
||||
uint8_t getB();
|
||||
uint8_t getG();
|
||||
|
||||
};
|
Reference in New Issue
Block a user