Сглаживает всегда обновляемое значение?

Как бы вы сгладить постоянно обновляемое значение, код:

int nLEDs = 25; // Number of LED's
int sensitivity = 1;

int incomingByte = 0;
int r = 0;
int g = 0;
int b = 0;
int a = 0;

void loop() {

if (Serial.available() > 0) {
incomingByte = Serial.parseInt();
a = (255 / 100) * (incomingByte * sensitivity);
}

// some code
}

void fade(){
for(int i=0;i<nLEDs;i++){
r = a;
g = 0;
b = 0;

FTLEDColour col = { r , g , b };
}
}

void ColourFade(){
for(int i=0;i<nLEDs;i++){
r = a;
g = 255 - a;
b = 0;

FTLEDColour col = { r , g , b };
}
}

Что касается методов затухания, как бы вы сгладили изменения значений вместо того, чтобы просто прыгать? Если это возможно.

0

Решение

Вместо этого:

value = NewValue

Сделайте что-то вроде этого:

value = (Value * 7 + NewValue + 7) / 8

Это приведет к value быть 7/8 старого значения и 1/8 нового значения, заставляя его постепенно «дрейфовать» к новому значению, а не прыгать туда все сразу.

1

Другие решения

Одним из вариантов будет использование двойных значений вместо целых значений RGB (и других). И, как упоминалось выше, 255/100 даст вам 2, а не 2,55, которые вы могли бы ожидать.

0

По вопросам рекламы [email protected]