адресная светодиодная лента

Статус
В этой теме нельзя размещать новые ответы.

Артём Кудашев

✩✩✩✩✩✩✩
11 Сен 2020
11
0
Заголовок должен отражать суть темы. Переформулируй или тема будет удалена.
Здравствуйте!!!
Нужно, чтобы при вращении потенциометра плавно изменялся цвет светодиодов от зелёного к жёлтому, от жёлтого к оранжевому, от оранжевого к красному и обратно. Я смог сделать, чтобы изменялся цвет, но не так как нужно. Использую метод потока, потому что подумал, что так будет проще. Светодиодов много(1024) и для этого я заказал arduino mega2560( у nano не хватает памяти) , но для тестов использую arduino nano и 512 светодиодов. Кому не сложно, можете направить меня в нужное русло. Просмотрел много форумов, но не нашёл ничего подобного.
Мой скетч:
#include <microLED.h>
#define M_PIN 6 // пин матрицы
#define P_PIN 0 // пин потенциометра
#define M_WIDTH 8 // ширина матрицы
#define M_HEIGHT 64 // высота матрицы
#define NUM_LEDS (M_WIDTH * M_HEIGHT)
#define COLOR_DEBTH 3
microLED<NUM_LEDS, M_PIN, MLED_NO_CLOCK, LED_WS2818, ORDER_GRB, CLI_AVER> strip;
void setup() {
pinMode(P_PIN, INPUT);
strip.setBrightness(100);
}
void loop() {
int color = analogRead(P_PIN)/ 4;
mData data = mWheel8(color);
strip.begin();
for (int i = 0; i < NUM_LEDS; i++) {
strip.send(data);
}
strip.end();
delay(60);
}
 

Артём Кудашев

✩✩✩✩✩✩✩
11 Сен 2020
11
0
Оформи код соответствующим тэгом
@Старик Похабыч, а можете, пожалуйста, подробнее объяснить зачем map()?

@Старик Похабыч,
#include <microLED.h>
#define M_PIN 6 // пин матрицы
#define P_PIN 0 // пин потенциометра
#define M_WIDTH 8 // ширина матрицы
#define M_HEIGHT 64 // высота матрицы
#define NUM_LEDS (M_WIDTH * M_HEIGHT)
#define COLOR_DEBTH 3
microLED<NUM_LEDS, M_PIN, MLED_NO_CLOCK, LED_WS2818, ORDER_GRB, CLI_AVER> strip;
void setup() {
pinMode(P_PIN, INPUT);
strip.setBrightness(255);
}
void loop() {
int color = analogRead(P_PIN);
color = map(color, 0, 1024, 0, 100);
mData data = mWheel8(color);
strip.begin();
for (int i = 0; i < NUM_LEDS; i++) {
strip.send(data);
}
strip.end();
delay(60);
}

Так?

@Старик Похабыч, спасибо, всё получилось!
 

Артём Кудашев

✩✩✩✩✩✩✩
11 Сен 2020
11
0
Оформи код соответствующим тэгом
@Старик Похабыч, можно Вас попросить мне помочь ещё в одном моменте:
нужно создать градиент из четырёх цветов и в зависимости от значения потенциометра добавлять или убирать цвета, пробовал как-то это сделать с помощью if, но получилось громоздко и этот способ не заработал.

скетч с градиентом:
#include <microLED.h>
#define M_PIN 6 // пин матрицы
#define P_PIN 0 // пин потенциометра градиента
#define P_PIN1 1 // пин потенциометра яркости
#define M_WIDTH 8 // ширина матрицы
#define M_HEIGHT 64 // высота матрицы
#define cur 7000 // max ток потребления в миллиамперах
#define NUM_LEDS (M_WIDTH * M_HEIGHT)
#define COLOR_DEBTH 3
microLED<NUM_LEDS, M_PIN, MLED_NO_CLOCK, LED_WS2818, ORDER_GRB, CLI_AVER> strip;
void setup() {
pinMode(P_PIN, INPUT);
pinMode(P_PIN1, INPUT);
strip.setMaxCurrent(cur);
strip.setBrightness(100);
strip.clear();
strip.show();
delay(100);
}
void loop() {
int color = analogRead(P_PIN);
color = map(color, 0, 1024, 0, 256); // потенциометр градиента
int Brightness = analogRead(P_PIN1);
Brightness = map(Brightness, 0, 1024, 0, 256);
strip.setBrightness(Brightness);
mGradient< 4 > myGrad; // тот самый градиент
// указываем цвет каждой точки
myGrad.colors[0] = mGreen;
myGrad.colors[1] = mYellow;
myGrad.colors[2] = mOrange;
myGrad.colors[3] = mRed;

for (int i = 0; i < NUM_LEDS; i++) {
strip.set(i, myGrad.get(i, NUM_LEDS));
}
strip.show();
}
 

Сотнег

★★★★★★★
15 Янв 2020
4,407
1,509
@Артём Кудашев,
в библиотеке FastLED для работы с различными градиентами есть так называемые палитры.

Если вам не подойдёт сама библиотека целиком, то можете попытаться подсмотреть код функций типа ColorFromPalette оттуда.


Цветовая модель HSV похожа на такую градиентную палитру, но исключать в ней промежуточные цвета не получится.
 
Изменено:
  • Лойс +1
Реакции: Старик Похабыч

Артём Кудашев

✩✩✩✩✩✩✩
11 Сен 2020
11
0
@Старик Похабыч, нужно, чтобы получилось как шкала
То-есть изначально 1/4 всей матрицы зелëная, потом, если крутить потенциометр, то получается, что половина матрицы состоит из градиента зелëный+жëлтый, потом зелëный+жëлтый+оранжевый, следом зелëный+жëлтый+оранжевый+красный
Вот именно с этим и возникли сложности

@Сотнег,у меня скетч на основе microled написан
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,266
1,303
Москва
1/4 матрицы зеленая, а 3 /4 какая ?

Переход от 1/4 зеленая, до 1/2 зеленая происходит плавно, или рывком, когда наступил некий порог?
 

Артём Кудашев

✩✩✩✩✩✩✩
11 Сен 2020
11
0
@Старик Похабыч,
3/4 не горит
переход от 1/4 зелёного до 1/2 матрицы(градиент зелёный + жёлтый) желательно плавно
искал в интернете реализацию чего-то подобного, но пока безрезультатно
 

poty

★★★★★★✩
19 Фев 2020
3,237
942
@Сотнег, прав, "чего-то подобное" есть в примерах по FastLED и во многих проектах здесь, на сайте. Но это не будет абсолютно точно повторять Вашу задумку. Потребуется немного больше усилий, чтобы выбрать нужные реализации и соединить это вместе.
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,266
1,303
Москва
Ну для начала. Научитесь зажигать любым одним цветом ту часть ленты, которая должна гореть в зависимости от положения потенциометра.
Т.е. при 0 что бы горело 1/4, при 1023 что бы вся лента горела.
Тут надо помнить, что аналоговый вход может дребезжать, надо его как то усреднить.
Потом отделите ту часть которая должна гореть постоянно зеленым, от той, что с градиентом. Ну и заливайте.
 
Статус
В этой теме нельзя размещать новые ответы.