Плавное изменение яркости светодиодной ленты
- Войдите на сайт для отправки комментариев
Вс, 18/04/2021 - 23:21
Ребята помогите. Можете подсказать как сделать. Вроде тыкался но не получается изменять яркость плавно.
Суть такая. Данные из фоторезистора, каждые 5 минут, подключенного к А0 преобразуются в аналоговые и используются в качестве напряжения для светодиодной ленты. Стоит таймер на 1000 миллисекунд как тестовое и в будущем будет увеличен до 5 минут. Нужно что бы лента меняла яркость плавно а не рывками. Для изменения яркости использовано ШИМ.
#include "FastLED.h" #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27,16,2); // Указываем, какое количество пикселей у нашей ленты. #define LED_COUNT 29 #define LED_PIN 5 // Определение директивы для аналогового пина №0(A0), на котором находится фоторезистор #define LDR_PIN A0 // Значения с аналогового выхода A0. Подбираются эксперементально и зависят от степени освещенности, // типа фоторезистора и резистора R2, учавствующего в делителе напряжения. CRGB strip[LED_COUNT]; void setup() { lcd.init(); lcd.backlight(); Serial.begin(9600); FastLED.addLeds<WS2812B, LED_PIN, RGB>(strip, LED_COUNT); } void loop() { // Получаем значение с аналогового входа A0 int val = analogRead(LDR_PIN); delay(1000); // Получение тестовых значений // Выодим на монитор полученное значение Serial.print("brightness = "); // Название значения для наглядного представления Serial.println(1023 - val); // Выводим значение и используем вызов println, те переноса строки int ledPower = map(val, 0, 1023, 0, 255); Serial.print("LedPower = "); Serial.println(ledPower); lcd.setCursor(0, 0); lcd.print("light level"); lcd.setCursor(0, 1); lcd.print(1023 - val); for (int i = 0; i < LED_COUNT; i++) { strip[i] = CRGB::White; // Белый цвет. FastLED.setBrightness(ledPower); } // Передаем цвета ленте. FastLED.show(); }
Для изменения яркости использовано ШИМ.
В каком месте Вы его используете? Строку(и) кода можете назвать?
Алгоритм такой - берете предыдущее значение яркости, увеличиваете (или уменьшаете) его на 1 и выводите на ленту, делаете паузу, опять увеличиваете (или уменьшаете) его на 1 и выводите на ленту, делаете паузу и т.д. до достижения требуемоего значения. Как-то так:
И выводим, конечно
Кстати - паузу можно не делать - у Вас там и так должно подтормаживать.