Untitled
Для обработки чисел от 1 до 100 в качестве яркости и преобразования их в диапазон от 1 до 255 нужно использовать пропорциональное преобразование. Вот обновленный скетч: #include <FastLED.h> #define NUM_LEDS 98 // Количество светодиодов в ленте #define DI_PIN 6 // Пин, к которому подключена лента CRGB leds[NUM_LEDS]; // Создаем массив для светодиодов uint8_t brightness = 255; // Начальная яркость (1-255) void setup() { Serial.begin(9600); // Инициализация порта FastLED.addLeds<WS2812, DI_PIN, GRB>(leds, NUM_LEDS); // Инициализация ленты FastLED.setBrightness(brightness); // Устанавливаем начальную яркость FastLED.clear(); // Выключаем ленту на старте FastLED.show(); } void loop() { if (Serial.available()) { String command = Serial.readStringUntil('\n'); // Чтение команды // Обработка команд цвета if (command == "RED") { fill_solid(leds, NUM_LEDS, CRGB::Red); // Красный } else if (command == "GREEN") { fill_solid(leds, NUM_LEDS, CRGB::Green); // Зеленый } else if (command == "BLUE") { fill_solid(leds, NUM_LEDS, CRGB::Blue); // Синий } else if (command == "OFF") { FastLED.clear(); // Выключаем ленту } else if (command.startsWith("B")) { // Изменение яркости, например, "B50" (от 1 до 100) int newBrightness = command.substring(1).toInt(); if (newBrightness >= 1 && newBrightness <= 100) { brightness = map(newBrightness, 1, 100, 1, 255); // Преобразование 1-100 в 1-255 FastLED.setBrightness(brightness); } } else if (command.startsWith("COLOR")) { // Установка цвета в формате "COLOR,R,G,B", например, "COLOR,255,100,50" int firstComma = command.indexOf(','); int secondComma = command.indexOf(',', firstComma + 1); int thirdComma = command.indexOf(',', secondComma + 1); if (firstComma > 0 && secondComma > 0 && thirdComma > 0) { int r = command.substring(firstComma + 1, secondComma).toInt(); int g = command.substring(secondComma + 1, thirdComma).toInt(); int b = command.substring(thirdComma + 1).toInt(); fill_solid(leds, NUM_LEDS, CRGB(r, g, b)); } } FastLED.show(); // Обновляем ленту после каждой команды } } Что изменено: 1. Преобразование яркости: Используется функция map(), чтобы преобразовать значения от 1 до 100 в диапазон от 1 до 255. map(newBrightness, 1, 100, 1, 255) — это линейное масштабирование яркости. 2. Пример расчета: Если передано B50, то яркость будет map(50, 1, 100, 1, 255) = 128 (примерно 50% от максимальной яркости). Если передано B10, то яркость будет map(10, 1, 100, 1, 255) = 25 (10% от максимальной яркости). Теперь яркость будет правильно масштабироваться в зависимости от полученного значения в диапазоне от 1 до 100.
Leave a Comment