LEDS #300 - новогодняя гирянда с эффектами (стандартная лента 5 м, 300 шт WS2812)
Новый год уже скоро. Эта простая в повторении гирлянда позволит в минимальное время создать достойное праздничное оформление окна (как на видео), рабочего места и… Для гирлянды потребуется стандартная 5-ти метровая лента со светодиодами WS2812, Arduino (Pro, mini), старый компьютерный блок питания, резистор 200 ом, желательно конденсатор 1000..3000 мкФ и немного свободного времени.
В интернете почти нет прошивок для Arduino для длинных гирлянд — это связано с ограничением по скорости и по объему RAM контроллера ATmega328, используемого в Arduino. В проекте используются переработанные алгоритмы, а также несколько новых, написанных и оптимизированных специально для используемого железа.
Подключение самой ленты WS2812 к контроллеру довольно простое, тут есть несколько статей на эту тему, для начинающих кроме того, есть много обучающих видео и статей по теме
А вот написать качественную прошивку (учитывая описанные выше сложности) довольно сложно и долго, тут выложена готовая прошивка, а рассматриваются только краткие особенности подключения.
1. Для вывода информации на ленту используется контакт, обозначенный D12 на плате Arduino
2. Через резистор 200 Ом этот вывод контроллера подключается ко входу DIN ленты.
3. Питание берется с разъема блока питания как для ленты так и для Arduino (поэтому на фото на видео идет один провод к ленте — земля и питание у них общие)
4. Для исключения помех, ставил конденсатор 3000 мкФ по питанию у Arduino
5. Питание (+ 5В) на ленту желательно подавать с обеих сторон (лента все таки 5 м, медь там тонкая, хоть и мощность светодиодов в прошивке ограничена, но все равно ток будет большой !)
Учтите, что теоретически при токе 60 mA на светодиод в режиме белого цвета, потребляемый ток всей 5-ти метровой ленты будет 18А по линии 5В (остальные линии блока питания оставляем неиспользуемыми). Это максимальный ток, по факту, с данной прошивкой 4-6 А от блока питания будет требоваться, а то и более. Некоторые БП могут уйти в защиту при перекосе потребления по линиям +5в и +12в (+12в у нас не подключено !). Тогда, видимо, придется искать другой БП. У меня стоит списанный ATX — тянет без проблем, даже не греется.
Способов запрограммировать Arduino существует великое множество, некоторые из них описаны на сайте по Arduino
Можно долго говорить, как все быстро, плавно, красиво и гладко. Но лучше один раз посмотреть на часть эффектов из проекта:
Процесс сборки? — так это много раз уже расписано, тут несколько тем есть. Это просто.
Прошивок достойных готовых для длинных лент вот нет :) — именно это я тут публикую :)
За кривые ссылки через ютьюб — первый минус. За отсутствие исходника — второй. За банальщину и поверхностный подход — третий. В общем, ничего выдающегося. Кроме желания раскрутить свои ресурсы.
Там 100 светодиодов, а здесь — 300. Акцент был сделан именно на длинную гирлянду.
В интернете почти нет прошивок для Arduino для длинных гирлянд — это связано с ограничением по скорости и по объему RAM контроллера ATmega328, используемого в Arduino.
Там 100 светодиодов, тут 300 :). Это принципиальный вопрос. Тут динамичные быстрые эффекты максимально использующие ресурсы процессора — там медленное перетекание и вспышки. Уберите гирлянду с елки — разложите на полу, те эффекты будут слабы :) очень слабы! — это просто мигалки в кустах.
В интернете почти нет прошивок для Arduino для длинных гирлянд — это связано с ограничением по скорости и по объему RAM
WS2812 требует три байта оперативки на диод.
Вот лента на 300 диодов, переливается радугой под управлением Arduino Nano:
Sketch uses 2356 bytes (7%) of program storage space. Maximum is 30720 bytes.
Global variables use 40 bytes (1%) of dynamic memory, leaving 2008 bytes for local variables. Maximum is 2048 bytes.
#include <Adafruit_NeoPixel.h>
#define PIXEL_PIN 2 // Digital IO pin connected to the NeoPixels.
#define PIXEL_COUNT 300
// Parameter 1 = number of pixels in strip, neopixel stick has 8
// Parameter 2 = pin number (most are valid)
// Parameter 3 = pixel type flags, add together as needed:
// NEO_RGB Pixels are wired for RGB bitstream
// NEO_GRB Pixels are wired for GRB bitstream, correct for neopixel stick
// NEO_KHZ400 400 KHz bitstream (e.g. FLORA pixels)
// NEO_KHZ800 800 KHz bitstream (e.g. High Density LED strip), correct for neopixel stick
Adafruit_NeoPixel strip = Adafruit_NeoPixel(PIXEL_COUNT, PIXEL_PIN, NEO_RGB + NEO_KHZ800);
bool oldState = HIGH;
int showType = 0;
void setup() {
strip.begin();
strip.show(); // Initialize all pixels to 'off'
}
void loop() {
rainbowCycle(1);
}
// Slightly different, this makes the rainbow equally distributed throughout
void rainbowCycle(uint8_t wait) {
uint16_t i, j;
for(j=0; j<256*5; j++) { // 5 cycles of all colors on wheel
for(i=0; i< strip.numPixels(); i++) {
strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & 255));
}
strip.show();
delay(wait);
}
}
// Input a value 0 to 255 to get a color value.
// The colours are a transition r - g - b - back to r.
uint32_t Wheel(byte WheelPos) {
WheelPos = 255 - WheelPos;
if(WheelPos < 85) {
return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
}
if(WheelPos < 170) {
WheelPos -= 85;
return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
}
WheelPos -= 170;
return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}
Расход памяти:
Sketch uses 2608 bytes (8%) of program storage space. Maximum is 30720 bytes.
Global variables use 40 bytes (1%) of dynamic memory, leaving 2008 bytes for local variables. Maximum is 2048 bytes
Сразу «специалиста» видать. Та библиотека динамически выделяет память в момент работы, а не в момент компиляции — там достаточно в конструктор класса заглянуть, что бы это заценить. И памяти жрет много. И это только под буфер на вывод. А еще память нужна под переменные, стек. Поставьте там число диодов = 300 и запустите в железе простейшую заливку :):):):)! adafruit просто непригодна для этого!
Еще — цель не просто по очереди последовательно вывести разными цветами, а сделать что-то красивое, динамичное. То, что у Вас на фото — это один эффект :) а остальное как будете делать? Покажите ЛЕНТЫ в 300 светодиодов с эффектами :)
Еще раз — «перелив» последовательное заполнение цветом, меняющимся c каким-либо шагом. Как остальные эффекты будете делать? на 300 диодах?
А что ж вы полностью все 5 метров не сняли? Не будет на Atmega328 эта библиотека работать на такой длине в 300 LED. Там она под другие процессоры с большим объемом памяти (ESP8266) заточена.
PS. А я вижу ваше окошко бледновато выглядит :) не позорьтесь :) залейте норм прошивку. Ссылка там в конце обзора.
гм, ну у вас я на видео вижу визуально то же самое, что реализовано в демо у Adafruit. Я оставил из него только радугу, она не сжирает мозг, но могу и «бегунки» включить, и что? Памяти хватит.
Я эту ленту планировал распустить на куски и собрать огромные восьмисегментные часы. К ардуине уже присобачен GPS-приёмник, чтобы брать со спутников точное время, ардуина разбирает NMEA и мигает лампочками, не потея. Если вспотеет, будет заменена на сторублёвую STM32.
да-да, я понимаю, что вы очень гордитесь «авторским» кодом, настолько — что выложили его только в бинарнике и носитесь как с писаной торбой с «эффектами», и с «оптимизациями», хотя чисто вычислительно задача сводится к заданию 3 x 300 = 900 байт за цикл, имея в распоряжении около 2008 байт свободной оперативы.
В чём подвиг-то? Исходники покажите, может мы правда восхитимся, вдруг у вас там всё вправду на сдвиге битов, затейливой работе с аппаратными таймерами, то-сё, мы снимем шляпу, цокнем языком, почешем в затылке…
Только меня не покидает ощущение, что там где-то в начале предательски засветится если не Neopixel, так #include «FastLED.h»
в Arduino IDE поставьте через меню библиотеки Neopixel и FastLED, после чего в меню New >Sketchbook>Examples появятся примеры; всё настолько просто. Для начала укажите, сколько у вас диодов в ленте и к какому выводу подключена лента — поменяйте две константы в коде.
Резистор там тоже мешать бы не должен (не те скорости). И он скорее нужен, но не 200 Ом, а где-то 50..100 (плюс примерно 50 Ом самого выхода, в итоге близко к оптимальному последовательное согласование с кабелем до ленты), без резистора может и «зазвенеть», если провод длинный.
Но вообще-то если 800 kHz, то на 400 никак не может работать (не выполняются требования к таймингам). Смутно подозреваю, что речь-то вовсе не о битовой тактировке, а о эффективной скорости передачи. А это надо уже анализатором смотреть или библиотеку ковырять…
Да я уже потом догадался. Просто у себя-то делал, выжимая по максимуму, не задумываясь о ограничениях снизу. А даташит достаточно невнятный, поэтому сразу не сообразил. А паузу можно делать между позициями, или даже между байтами или битами? Просто любопытно, а проверять лениво…
Но все равно, битовый тайминг привязан к 800 kHz, хотя диапазон солидный (500...1500 kHz).
Со всего видео насчитал 3 эффекта, которых нет в примерах NeoPixel. Будем считать, то они авторские, хотя в сети можно найти кастомные эффекты, ну да ладно.
Против кучи других эффектов в библиотеке — ни о чем.
Мне только интересно, чего так трястись за прошивку? Что-то не видно монетизации, тогда ради чего?
Любой эффект — последовательное заполнение буфера в 900 байт (при 300 светодиодах) по определенной формуле и вывод на порт 1 и 0 с определенными таймингами.
Мужик, честно -я не против обзора — любой обзор лучше чем его отсутствие — и за Ваш — спасибо.
Но вот только чушь не пишите про память и эффекты, ладно? — Sanja здесь прав.
Для того, чтобы генерировать все эти эффекты на 300-светодиодной герлянде нужно реально из большого — только 900 байт буфера — остальное делается через HSV2RGB и все. Поскольку я сам писал на асме работу с WS2812b, я и из чистого ATTINY85 выжимал такие штуки с WS2812, которые ардуинщикам и не снились. Там только одна проблема — ограничение по тактовке — соответственно и количеству диодов (но 300 — легко). С битбэнг-ом это особенно проявляется, но можно обойти это через SPI / i2c.
из чистого ATTINY85 выжимал такие штуки с WS2812, которые ардуинщикам и не снились.
А покажете, а? Вот правда, оч.интересно…
Я под атмел тоже писал на асме, но в те времена tiny2313 назывались at90s2313 и никаких WS, конечно же, не было, поэтому только под матрицы голых светодиодов для бегущих строк…
PS: Автор, конечно, трындит гонит чушь и набивает себе цену на пустом месте. Все неопикселовские либы легко портируются (или уже портированы) под современные esp или stm, — на ардуине свет не сошёлся, поди ещё и финансово дешевле выйдет, а ограничений в памяти не будет ну вот вообще… Даже на этом ресурсе на ESP кто-то делал WS-адресные ленты, и у Гайвера что-то было точно, хотя я не очень активно знаком с его творчеством…
А если про то, что ардуинщикам не снилось — например на 85 управление лентой всок и одновременных опрос ик приёмника.
У нас тут ещё с Yuri был спор, где он говорил что это невозможно.
Все возможно если на асме писать — встроил опрос ик между отправкой 24 бит цвета (там таймаут позволяет).
Работает очень просто — сигнал появился на ик — бросили все, приняли код, заново пошли ленту грузить. Единственное что во время приёма лента остаётся светить в недетерминированном состоянии. А ИК использовался для переключения типа эффекта, его скорости и цвета.
вот за что мы уважаем муську, так это за комменты. Пожалуйста, не поленитесь выложить код хоть на github, хоть на pastebin — очень любопытно смотреть на нетривиальные вещи. Спасибо!
В принципе, можно обойтись и одним байтом на диод (16 цветов*16 градаций яркости), преобразовывая в 24 на лету. И если использовать UART в режиме SPI и PWM-модулятор для битового кодирования (у меня это один корпус 74HC74), то вычислительных ресурсов остается очень много. Но по тактированию — да, все равно ограничение будет. Но если, скажем, 60 раз в секунду — где-то 540 точек.
Увы, в плане фантазии с эффектами у меня получается куда хуже писанины на asm…
Я уже давно перешел на Wemos D1 mini — стоит чуть дороже Arduino mini, а начинка гораздо мощнее, и еще Wi-fi есть.
А на последней ардуинке собрал управление для матрицы 10х10, прошивку взял из этого проекта alexgyver.ru/gyvermatrixbt/
Я в ардуино не понимаю, никогда дела с ними не имел… подскажите, а эта прошивка подойдет для любой или нужно какую то конкретную купить? Очень понравилась идея.
Спасибо автору обзора.
На видео вначале есть фото прототипа. Это именно тот, что при съемках использован. Но лучше брать примерно такой «USB Nano ATmega328P CH340G». В конце CH340G — это название встроенного переходника USB->COM — драйверы точно не залочат. Стоит чуть дороже, но не будет проблем с подсоединением к компу и с прошивкой через переходники (reset там вручную не придется жать....)
Что бы драйверы не «залочили» надо нормальную ftdi или siliconlabs покупать, а не трехкопеечный фейк. «Я не настолько богат, что бы покупать дешевые вещи».
Неверно! Для корректной работы и тем более белого свечения, эту ленту (5м) надо запитывать в 3х точках, а лучше в 4х и толстым проводом. Берется провод 2.5мм² к нему на равном расстоянии паяются выводы провода 0.5-075мм² 10-15см, а выводы уже к ленте. Вот тогда получите свои амперы на входе.
Для работы с эффектами с пониженной яркостью, можно брать провода потоньше, но запитывать в нескольких точках обязательно!
Все же «А вот написать качественную прошивку (учитывая описанные выше сложности) довольно сложно и долго» это как сказать «вода всегда мокрая». Вот нет, она бывает еще и твердая.
Для меня, например, это очень просто. Никаких «довольно сложно и долго». Долго — это когда мне просто лень.
Библиотека Fastled спокойно работает на ардуино уно, нано и т.п. Демо-эффектов хватает.Тянет пресловутые 300 диодов.
Я до сих пор не могу понять в чем великая инновационность ваших исходников, но там реально дел на один вечер.
Нда, протупил я, когда во всех своих обзорах публиковал исходники. Причём, одновременно и в файлохранилище заливал и под спойлер в тексте обзора. Да ещё и в личке почти сотне народу советы и консультации по своим проектам давал (и продолжаю давать).
Эх-ма. Надо было только хексы выкладывать, а в обзорах писать, что у меня мега-экстра-супер-гипер-секретные алгоритмы, до которых планета ещё не доросла…
Ожидаем момента, когда тут кто-нибудь начнёт торговать скетчами под ардуину-проМини :-)
PS: И что характерно: всё, что касается моей теплицы, погодника или тех же GPS-часов — реально уникальный авторский код, написанный мною практически с нуля… Во я лллошара :)
Собственно, в конце почти каждого своего обзора я об этом и пишу, что это — главная побуждающая сила для написания обзоров :) и это действительно бесценно.
Перепробывал много, в результате пользуюсь простым скетчем, работает на Nano, esp8266 и других плат. Нужно выбрать нужные вам эффекты и поставить их номера в строке, мои выбранные в скетче некоторые повторяются, еще пропишите в строке общее количество эффектов все видно в коментариях, можно раскоментировать random будет случайный выбор, но могут несколько раз подряд идти. Номера эффектов можно посмотреть здесь github.com/kitesurfer1404/WS2812FX но лучше загрузить на esp8266 стандартный пример библиотеки WS2812FX webinterface тогда можно будет управляя с телефона просмотреть все эффеты «вживую».
#include <WS2812FX.h>
#define LED_COUNT 400 // кол-во светодиодов в гирлянде
#define LED_PIN D1 // пин для вывода на гирлянду
#define DEFAULT_SPEED 2500 // задержка в мс, по дефолту 1000
#define TIMER_MS 60000 // время длительности одного эффекта в мс
unsigned long last_change = 0;
unsigned long now = 0;
int modes[] = {32,3,13,55,33,10,5,39,5,33,14,22,12,35,38,7,39,11,20,46,39,8,12,43,35,13,44,32,17,28,13,36,23,14,34,}; // массив с желаемыми ID эффектов
int i = 0; // счётчик индекса в массиве эффектов
int l = 0; // индекс прошлого (last) эффекта
int m = 35; // кол-во эффектов, см. массив modes
void setup() {
strip.init();
strip.setBrightness(250); // установка яркости 0 — 255
strip.setSpeed(DEFAULT_SPEED); // установка скорости (задержки)
strip.setColor(0xFF0400); // дефолтный цвет
strip.setMode(6); // стартовая установка 6го режима
strip.start();
}
void loop() {
now = millis();
strip.service();
if(now — last_change > TIMER_MS) {
if(l == 17 || l == 42 || l == 46){
strip.setSpeed(DEFAULT_SPEED); // вернуть скорость на дефолт
}
if(modes[i] == 17 || modes[i] == 42 || modes[i] == 46){
strip.setSpeed(DEFAULT_SPEED*3); // очень быстрые — замедлить, больше задержка х3
}
strip.setMode(modes[i]);
last_change = now;
l = modes[i];
//i = random(0,12);
i++;
if(i == m){
i = 0;
}
}
}
Подскажите у меня есть Гирлянда на WS2811 и есть ESP8266 что-то нужно править в скетче github.com/toblum/McLighting
что бы можно было запустить светодиоды WS2811
Функционально — ничего. Просто нужно указывать число светодиодов в 3 раза меньше, чем по факту, т.к. в 2811 один чип на 3 диода.
Как раз позавчера повесил гирлянду 2812, использую скетч McLighting. Только для режима авто сделал свою подборку.
Если 7-ая нога чипа «в воздухе» — режим 800 кГц, если подтянута к питанию — 400 кГц. Но я ни разу не видел у китайцев гирлянды на 400 кГц (Low speed mode). Все по умолчанию на 800 кГц.
А лента вообще может сгореть? Залил скетч в ардуино, включил. Все работает. Доволен. Оставил включенным. Через пол часа прихожу ни один светодиод не светит. Выключаю-включаю питание — ничего не происходит только на короткое время вспыхивает третий светодиод. Ардуину перешивал. Менял вывод подключения — не работает лента. При подключении на 13 пин, светодиод ардуины мигает себе. Лента была скручена в бобине.
Не знаю про NeoPixel- ленту, но было раз — оставил включенной в бобине ленту диодов 5050 (белых). Через какое-то время лента нагрелась так, что часть светодиодов даже отпаялись. Так что…
Они от перегрева только так дохнут. Но обычно перестает работать часть ленты. Можешь попробовать отрезать первые три диода. Точнее резать по одному и проверять.
так первые полметра не были в бобине и перегреться не могли. Но тоже не светят. Или это сгорел один диод и садит линию данных. А из-за этого не светят остальные.
Дело было не в бобине :)
Сгорели первые 7 светодиодов, которые не были смотаны в бобину. Из-за них не передавались данные на следующие светодиоды. Отрезал их, подкоректировал скетч. Пока работает. Но кто знает сколько оно будет работать. Даже не охота цеплять на место.
Вот уже третьи сутки все работает нормально. Моя версия такова. На одном из форумов вычитал, что эти светодиоды боятся отвала общего провода. Этот самый отвал теоретически мог у меня произойти. А так как линия данных ленты была подключена к ардуино без защитного резистора, то критический ток, протекающий через линию данных и плюс питания, вывел из строя первые 7 светодиодов. Остальные выдержали. Версия перегрева исключается потому, что сгоревшие светодиоды не были смотаны в бобину. И тем более они не светились непрерывно, а динамически.
Прошивок достойных готовых для длинных лент вот нет :) — именно это я тут публикую :)
Никого повторы не останавливают)))))
Не могу с жабой договориться.
ebay.com/itm/232899956120
drive.google.com/open?id=1bachueYRMDOOEKCIUShpquCPAcPh4Hpn
HEX заливать геморойно
mySKU.me/blog/aliexpress/58913.html
мне нравится больше.
Вот тут сделано реально круто.
Прямо в Arduino IDE имеется блестящая библиотека от Adafruit, с кучей примеров, и кучей статей по теме — learn.adafruit.com/search?q=neopixel
В конце-концов, есть Neopixel Uberguide: cdn.sparkfun.com/datasheets/Components/LED/adafruit-neopixel-uberguide.pdf
WS2812 требует три байта оперативки на диод.
Вот лента на 300 диодов, переливается радугой под управлением Arduino Nano:
Расход памяти:
Вот, снял демо:
Еще — цель не просто по очереди последовательно вывести разными цветами, а сделать что-то красивое, динамичное. То, что у Вас на фото — это один эффект :) а остальное как будете делать? Покажите ЛЕНТЫ в 300 светодиодов с эффектами :)
Снимите обзор в архив, не позорьтесь, и не минусите, это жалко выглядит
А что ж вы полностью все 5 метров не сняли? Не будет на Atmega328 эта библиотека работать на такой длине в 300 LED. Там она под другие процессоры с большим объемом памяти (ESP8266) заточена.
PS. А я вижу ваше окошко бледновато выглядит :) не позорьтесь :) залейте норм прошивку. Ссылка там в конце обзора.
Я эту ленту планировал распустить на куски и собрать огромные восьмисегментные часы. К ардуине уже присобачен GPS-приёмник, чтобы брать со спутников точное время, ардуина разбирает NMEA и мигает лампочками, не потея. Если вспотеет, будет заменена на сторублёвую STM32.
Тут половины эффектов нигде нет. Код авторский. Даже если похоже — вращения все в обе стороны. Нигде нет.
В чём подвиг-то? Исходники покажите, может мы правда восхитимся, вдруг у вас там всё вправду на сдвиге битов, затейливой работе с аппаратными таймерами, то-сё, мы снимем шляпу, цокнем языком, почешем в затылке…
Только меня не покидает ощущение, что там где-то в начале предательски засветится если не Neopixel, так #include «FastLED.h»
ЗЫ. Если не меняю NEO_KHZ800 на NEO_KHZ400 то лента мерцает непонятными цветами… У всех так?
… Поэтому hex прошивка не работает…
Но вообще-то если 800 kHz, то на 400 никак не может работать (не выполняются требования к таймингам). Смутно подозреваю, что речь-то вовсе не о битовой тактировке, а о эффективной скорости передачи. А это надо уже анализатором смотреть или библиотеку ковырять…
Но все равно, битовый тайминг привязан к 800 kHz, хотя диапазон солидный (500...1500 kHz).
Против кучи других эффектов в библиотеке — ни о чем.
Мне только интересно, чего так трястись за прошивку? Что-то не видно монетизации, тогда ради чего?
Но вот только чушь не пишите про память и эффекты, ладно? — Sanja здесь прав.
Для того, чтобы генерировать все эти эффекты на 300-светодиодной герлянде нужно реально из большого — только 900 байт буфера — остальное делается через HSV2RGB и все. Поскольку я сам писал на асме работу с WS2812b, я и из чистого ATTINY85 выжимал такие штуки с WS2812, которые ардуинщикам и не снились. Там только одна проблема — ограничение по тактовке — соответственно и количеству диодов (но 300 — легко). С битбэнг-ом это особенно проявляется, но можно обойти это через SPI / i2c.
Я под атмел тоже писал на асме, но в те времена tiny2313 назывались at90s2313 и никаких WS, конечно же, не было, поэтому только под матрицы голых светодиодов для бегущих строк…
PS: Автор, конечно,
трындитгонит чушь и набивает себе цену на пустом месте. Все неопикселовские либы легко портируются (или уже портированы) под современные esp или stm, — на ардуине свет не сошёлся, поди ещё и финансово дешевле выйдет, а ограничений в памяти не будет ну вот вообще… Даже на этом ресурсе на ESP кто-то делал WS-адресные ленты, и у Гайвера что-то было точно, хотя я не очень активно знаком с его творчеством…www.evilgeniuslabs.org/
— что показательно, код каждого выложен на github
Мне вот этот особо приглянулся —
А если про то, что ардуинщикам не снилось — например на 85 управление лентой всок и одновременных опрос ик приёмника.
У нас тут ещё с Yuri был спор, где он говорил что это невозможно.
Все возможно если на асме писать — встроил опрос ик между отправкой 24 бит цвета (там таймаут позволяет).
Работает очень просто — сигнал появился на ик — бросили все, приняли код, заново пошли ленту грузить. Единственное что во время приёма лента остаётся светить в недетерминированном состоянии. А ИК использовался для переключения типа эффекта, его скорости и цвета.
Увы, в плане фантазии с эффектами у меня получается куда хуже писанины на asm…
А на последней ардуинке собрал управление для матрицы 10х10, прошивку взял из этого проекта
alexgyver.ru/gyvermatrixbt/
Спасибо автору обзора.
Для работы с эффектами с пониженной яркостью, можно брать провода потоньше, но запитывать в нескольких точках обязательно!
Для меня, например, это очень просто. Никаких «довольно сложно и долго». Долго — это когда мне просто лень.
Я до сих пор не могу понять в чем великая инновационность ваших исходников, но там реально дел на один вечер.
Эх-ма. Надо было только хексы выкладывать, а в обзорах писать, что у меня мега-экстра-супер-гипер-секретные алгоритмы, до которых планета ещё не доросла…
Ожидаем момента, когда тут кто-нибудь начнёт торговать скетчами под ардуину-проМини :-)
PS: И что характерно: всё, что касается моей теплицы, погодника или тех же GPS-часов — реально уникальный авторский код, написанный мною практически с нуля… Во я лллошара :)
ЗЫ И спасибо за это, кстати.
#include <WS2812FX.h>
#define LED_COUNT 400 // кол-во светодиодов в гирлянде
#define LED_PIN D1 // пин для вывода на гирлянду
#define DEFAULT_SPEED 2500 // задержка в мс, по дефолту 1000
#define TIMER_MS 60000 // время длительности одного эффекта в мс
WS2812FX strip = WS2812FX(LED_COUNT, LED_PIN, NEO_RGB + NEO_KHZ800);
unsigned long last_change = 0;
unsigned long now = 0;
int modes[] = {32,3,13,55,33,10,5,39,5,33,14,22,12,35,38,7,39,11,20,46,39,8,12,43,35,13,44,32,17,28,13,36,23,14,34,}; // массив с желаемыми ID эффектов
int i = 0; // счётчик индекса в массиве эффектов
int l = 0; // индекс прошлого (last) эффекта
int m = 35; // кол-во эффектов, см. массив modes
void setup() {
strip.init();
strip.setBrightness(250); // установка яркости 0 — 255
strip.setSpeed(DEFAULT_SPEED); // установка скорости (задержки)
strip.setColor(0xFF0400); // дефолтный цвет
strip.setMode(6); // стартовая установка 6го режима
strip.start();
}
void loop() {
now = millis();
strip.service();
if(now — last_change > TIMER_MS) {
if(l == 17 || l == 42 || l == 46){
strip.setSpeed(DEFAULT_SPEED); // вернуть скорость на дефолт
}
if(modes[i] == 17 || modes[i] == 42 || modes[i] == 46){
strip.setSpeed(DEFAULT_SPEED*3); // очень быстрые — замедлить, больше задержка х3
}
strip.setMode(modes[i]);
last_change = now;
l = modes[i];
//i = random(0,12);
i++;
if(i == m){
i = 0;
}
}
}
github.com/toblum/McLighting
что бы можно было запустить светодиоды WS2811
Как раз позавчера повесил гирлянду 2812, использую скетч McLighting. Только для режима авто сделал свою подборку.
WS2812 — 800 KHz
WS2811 — 400 KHz
Это не влияет на работу
Можно здесь изменить значение если не заработает на 800.
Я плохо разбираюсь в arduino
Подчеркнул
Сгорели первые 7 светодиодов, которые не были смотаны в бобину. Из-за них не передавались данные на следующие светодиоды. Отрезал их, подкоректировал скетч. Пока работает. Но кто знает сколько оно будет работать. Даже не охота цеплять на место.