не говорите ерунды! Скетч из проекта не использует адресации диодов, так что если он не изменялся, то ничего адресовать и не будет. Исходя из присланного видео я уверен, что в скетче что-то менялось (код или неверно изменены настройки). Загрузите пример First Light из примеров FastLED без изменений (только укажите количество диодов в строке 15 и номер пина, к которому подключено, в строке 21) и попробуйте с ним. Уверен, что будет всё ОК.диоды прошиты по номерам и не взаимозаменяемые
Точно прозванивали управляющий провод? На отключенной ленте? Он там, насколько я помню, не центральный, как можно было бы ожидать. Прозвон, допустим, управляющего провода на один из питающих будет давать положительный результат в одну сторону, а если лента подключена, то, скорее всего, в две. Неправильная припайка гирлянды ко второму контролеру (что за контроллер, кстати, забыли указать? как в проекте?) может приводить к разным дурацким последствиям.в гирлянде управляющий провод прозванивается тестером от начала до конца
вообще ни о чём - нужно сфотографировать расправленный нетронутый участок и участок с пайкой, тоже расправленный. Нужно сфотографировать как это подключено у вас к Ардуино, включая разъём и провода от ответной части разъёма.картинка сростков гирлянды
#include <FastLED.h>
// How many leds are in the strip?
#define NUM_LEDS 50 // физическое кол-во диодов
#define NUM_LEDS_MAX 100 // максимальное пространство адресов
#define DATA_PIN 6
// This is an array of leds. One item for each led in your strip.
CRGB leds[NUM_LEDS]; // физическое кол-во диодов
CRGB leds_max[NUM_LEDS_MAX]; // максимальное пространство адресов
const uint8_t XYTable[] = {
50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
60, 61, 62, 63, 64, 65, 66, 67, 68, 69,
70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
80, 81, 82, 83, 84, 88, 89, 90, 91, 92,
93, 94, 95, 96, 97, 85, 86, 87, 98, 99
};
void setup() {
delay(2000);
Serial.begin(9600);
FastLED.addLeds<WS2812B, DATA_PIN, RGB>(leds_max, NUM_LEDS_MAX); // GRB ordering is typical
}
void loop() {
// Move a single led
for(int whiteLed = 0; whiteLed < NUM_LEDS; whiteLed = whiteLed + 1) {
// Turn our current led on, then show the leds
if (whiteLed < 10) { leds[whiteLed] = CRGB::Yellow; }
else if (whiteLed < 20) { leds[whiteLed] = CRGB::Green; }
else if (whiteLed < 30) { leds[whiteLed] = CRGB::Purple; }
else if (whiteLed < 40) { leds[whiteLed] = CRGB::Blue; }
else if (whiteLed < 49) { leds[whiteLed] = CRGB::Gray; }
else if (whiteLed == 49) { leds[whiteLed] = CRGB::Green; }
else if (whiteLed < 99) { leds[whiteLed] = CRGB::Red; }
else if (whiteLed == 99) { leds[whiteLed] = CRGB::White; }
Serial.println(String(whiteLed) + " " + String(XYTable[whiteLed]));
for(int nLed = 0; nLed < NUM_LEDS; nLed = nLed + 1) {
leds_max[XYTable[nLed]] = leds[nLed]; // Маппинг адреса
}
// Show the leds
FastLED.show();
// Wait a little bit
delay(800);
// Turn our current led back to black for the next loop around
leds[whiteLed] = CRGB::Black;
}
}
Не нужно дорабатывать - запустите его в первоначальном виде на своей гирлянде и посмотрите результат. Доработка - место ошибок, только и всего.Пример First Light я использовал, даже доработал его
зачем столько телодвижений? Вы же всё равно, как говорите, не видите первых 50 светодиодов, так объявите пустой массив из 50 светодиодов, а непосредственно за ним тот, что Вы будете заполнять. FastLED-у скормите адрес первого массива с суммарным размером двух массивов. Всё, никаких "маппингов" и прочей ерунды.костыль
#include <FastLED.h>
#define NUM_LEDS 50 // физическое кол-во диодов
#define NUM_HIDDEN 50 // невидимое количество светодиодов
#define NUM_LEDS_MAX NUM_LEDS+NUM_HIDDEN
#define DATA_PIN 6
CRGB leds_max[NUM_HIDDEN]; // максимальное пространство адресов
CRGB leds[NUM_LEDS]; // физическое кол-во диодов
CRGB mycolors[] = {CRGB::Yellow, CRGB::Green, CRGB::Purple, CRGB::Blue, CRGB::Gray};
void setup() {
delay(2000);
Serial.begin(9600);
FastLED.addLeds<WS2812B, DATA_PIN, RGB>(leds_max, NUM_LEDS_MAX); // GRB ordering is typical
}
void loop() {
for(int flis=0, ns=0; flis < NUM_LEDS; flis+=10, ns++) {
for (byte nlis=0; nlis < 10; nlis++) {
leds[flis+nlis] = mycolors[ns];
FastLED.show();
delay(800);
leds[flis+nlis] = CRGB::Black;
}
}
}
Если нужен просто сдвиг, то да. Но мне еще нужно было переставить местами часть диодов, чтобы исправить последовательность включения. Гирлянда с 3 сростками, перепутанными по порядку. С маппингом это получилось, см. мою карту маппинга, там номера не по порядку.никаких "маппингов" и прочей ерунды
Тоже так думал, оказалось, это не так именно с моей гирляндой. Натыкался на отзывы, что людям приходилось выбрасывать рулонами новую ленту. Только потому, что не проверили сразу, а потом оказалось, что часть диодов или все не горят. Данный опыт мог бы помочь, потому и написал. Если адреса диодов за пределами сконфигурированных, то они не будут гореть.в адресной ленте нет никаких номеров
исправил.нерабочий
Почти без изменений, 13 светят (кроме №9), 1, 3 и 5 меняют цвет.исправил
Спаять входы DIN всех 3 диодов в коробочке параллельно. Тогда они будут работать синхронно, как один светодиод. В прошивке ничего не менять, кол-во диодов сделать равным числу коробочек.заставить светодиоды гореть группами по три штуки
Как раз есть четкое обращение по номерам, на этом и основана работа с адресными светодиодами. Создается массив leds и все эффекты назначают элементам этого массива свои цвета и яркость, каждому свое. Опишите, в чем у вас проблема. Если гирлянду не резали, то она должна нормально работать со стандартной прошивкой. Если разрезали или есть перепутанные куски, то могу прислать свой доработанный код для работы с такими кусками. У меня он работает, то есть именно эта проблема исправлена.прошивке для гирлянды, на сколько я понимаю, нет чёткого обращения к конкретному порядковому номеру светодиода
Мне? Нет, не нужна. Висит себе на окне, на которое в общем-то никто воду не льет, а убиться от 5В вряд ли получится детям и животнымэти без изоляции светиков.
Не нужна?