Untitled
unknown
plain_text
9 months ago
3.7 kB
3
Indexable
Для обработки чисел от 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.
Editor is loading...
Leave a Comment