2018-06-25 08:17:07 +02:00
|
|
|
/*
|
2018-06-27 16:57:18 +02:00
|
|
|
LED Fading mit NodeMCU v 1.0
|
2018-06-25 08:17:07 +02:00
|
|
|
*/
|
|
|
|
|
|
|
|
class RgbLed {
|
|
|
|
int ledRedPin;
|
|
|
|
int ledGreenPin;
|
|
|
|
int ledBluePin;
|
|
|
|
|
|
|
|
byte ledRedIntensity;
|
|
|
|
byte ledGreenIntensity;
|
|
|
|
byte ledBlueIntensity;
|
|
|
|
|
|
|
|
byte ledRedIntensityTo;
|
|
|
|
byte ledGreenIntensityTo;
|
|
|
|
byte ledBlueIntensityTo;
|
|
|
|
|
|
|
|
long durationLeft;
|
2018-06-27 16:57:18 +02:00
|
|
|
long previousMillis;
|
2018-06-25 08:17:07 +02:00
|
|
|
|
|
|
|
public:
|
|
|
|
RgbLed(int redPin, int greenPin, int bluePin)
|
|
|
|
{
|
|
|
|
ledRedPin = redPin;
|
|
|
|
ledGreenPin = greenPin;
|
|
|
|
ledBluePin = bluePin;
|
|
|
|
|
|
|
|
pinMode(ledRedPin, OUTPUT);
|
|
|
|
pinMode(ledGreenPin, OUTPUT);
|
|
|
|
pinMode(ledBluePin, OUTPUT);
|
|
|
|
|
|
|
|
ledRedIntensity = 0;
|
|
|
|
ledGreenIntensity = 0;
|
|
|
|
ledBlueIntensity = 0;
|
|
|
|
|
|
|
|
ledRedIntensityTo = ledRedIntensity;
|
|
|
|
ledGreenIntensityTo = ledGreenIntensity;
|
|
|
|
ledBlueIntensityTo = ledBlueIntensity;
|
|
|
|
|
|
|
|
durationLeft = 0;
|
2018-06-27 16:57:18 +02:00
|
|
|
previousMillis = 0;
|
2018-06-25 08:17:07 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
public:
|
|
|
|
void ChangeColor(int redIntesity, int greenIntensity, int blueIntensity, long duration)
|
|
|
|
{
|
|
|
|
if (ledRedIntensityTo == ledRedIntensity && ledGreenIntensityTo == ledGreenIntensity && ledBlueIntensityTo == ledBlueIntensity
|
|
|
|
&& ledRedIntensity != redIntesity && ledGreenIntensity != greenIntensity && ledBlueIntensity != blueIntensity) {
|
|
|
|
durationLeft = duration;
|
|
|
|
ledRedIntensityTo = ledRedIntensity;
|
|
|
|
ledGreenIntensityTo = ledGreenIntensity;
|
|
|
|
ledBlueIntensityTo = ledBlueIntensity;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public:
|
|
|
|
void Update(long currentMillis)
|
|
|
|
{
|
2018-06-27 16:57:18 +02:00
|
|
|
if (ledRedIntensityTo != ledRedIntensity && ledGreenIntensityTo != ledGreenIntensity && ledBlueIntensityTo != ledBlueIntensity) {
|
|
|
|
ledRedIntensity = lerp(ledRedIntensity, ledRedIntensityTo, previousMillis, previousMillis + durationLeft, currentMillis);
|
|
|
|
ledGreenIntensity = lerp(ledGreenIntensity, ledGreenIntensityTo, previousMillis, previousMillis + durationLeft, currentMillis);
|
|
|
|
ledBlueIntensity = lerp(ledBlueIntensity, ledBlueIntensityTo, previousMillis, previousMillis + durationLeft, currentMillis);
|
|
|
|
UpdateLEDs();
|
|
|
|
}
|
|
|
|
durationLeft = durationLeft - (currentMillis - previousMillis);
|
|
|
|
previousMillis = currentMillis;
|
2018-06-25 08:17:07 +02:00
|
|
|
}
|
|
|
|
|
2018-06-27 16:57:18 +02:00
|
|
|
byte lerp(byte intensityStart, byte intensityEnd, long timeStart, long timeEnd, long timeCurrent) {
|
|
|
|
return ( ( timeCurrent - timeStart )( intensityEnd - intensityStart) / ( timeEnd - timeStart) ) + intensityStart;
|
|
|
|
}
|
|
|
|
|
|
|
|
void UpdateLEDs() {
|
|
|
|
digitalWrite(ledRedPin, ledRedIntensity);
|
|
|
|
digitalWrite(ledGreenPin, ledGreenIntensity);
|
|
|
|
digitalWrite(ledBluePin, ledBlueIntensity);
|
2018-06-25 08:17:07 +02:00
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
RgbLed ledStripe(5, 4, 0);
|
|
|
|
|
|
|
|
void setup() {
|
|
|
|
}
|
|
|
|
|
|
|
|
void loop()
|
|
|
|
{
|
|
|
|
ledStripe.ChangeColor(30, 200, 255, 1000);
|
|
|
|
ledStripe.Update(millis());
|
|
|
|
}
|