Скетч для LED-куба 4х4х4
- Войдите на сайт для отправки комментариев
Доброго времени суток всем!
Подскажите может кто то в курсе!?! Собрал я светодидный куб 4х4х4, хочу подключить его к Arduino UNO, но незнаю как....
В программировании полный ноль, хотя один светодиод могу зажечь самостоятельно!)))
Пример работы и библиотеку взял здесь но не совсем понятно к каким пинам подключать все мои 20 (16-столбов+4-слоя) получившихся контактов.
Если ориентироваться этой статьей то все получается так как там в скетче описаны номера портов к которым нужно подключаться и хватает цивровых пинов, но куб получается 3х3х3(((
подскажите как использовать 6 аналоговых портов вместес 14 цифровыми?
Или может кто то уже делал такое и у когото есть скетч для такого куба, или хотя бы ссылочку на статью где есть схема подключения куба 4х4х4 к Arduino UNO.?
Или может как то можно переделать скетч 3х3х3 на 4х4х4?
надеюсь на помощь опытных Arduinщиков))))
подскажите как использовать 6 аналоговых портов вместес 14 цифровыми?
подскажите как использовать 6 аналоговых портов вместес 14 цифровыми?
Сделал подключение как в этой статье (разбирался по фото)
Но скетч который там предоставлен очень короткий, точнее цикл маленький хотя сам скетч на 250 строк.
Вопрос заключается в том, можно ли его изменить "под себя", на какие строчки обратить внимание, какие можно трогать какие не стоит?
И можно ли как то воспользоваться вот этим приложением, если да то как перенести получившиеся значения в Arduino IDE?
Заранее благодарю за ответ!
Разобрался все таки!)))
Только очень уж длинный скетч у меня получается...наверное его можно как то оптимизировать и уменьшить?! Посмотрите если не сложно м по возможности подскажите в каком направлении думать?!)
Кстати , аналоговые входы можно не только по имени А0..А5 обращатся ..А можно как обычный номер ,начиная с 14 по 19 (для UNO ,точнее м/к 328).На МЕГЕ вроде нумерация с 54.
Кстати , аналоговые входы можно не только по имени А0..А5 обращатся ..А можно как обычный номер ,начиная с 14 по 19 (для UNO ,точнее м/к 328).На МЕГЕ вроде нумерация с 54.
Да, спасибо, это я уже понял)
А вы не можете глянуть мой скетч? Если разбираетесь?! ону меня уж очень длинный получился и занял всю памать UNO...наверное его можно как то оптимизировать и уменьшить?! Посмотрите если не сложно и по возможности подскажите в каком направлении думать?!
Например в шаге когда горят все диоды у меня вот такое:
Изучайте функции типа for() {... }
Изучайте функции типа for() {... }
А можно по подробнее на моем примере как ее написать правильно?
Спасибо maksim)
оптимизировал свой скетч-сэкономил немного место МК для новых эффектов
Подскажите еще команду для повтора эффекта? Я сейчас тупо копирую несколько раз один и тотже эффект для неоходимого количства повторов этого эффекта)
Почитайте про вызовы функций
http://arduino.ru/Reference/FunctionDeclaration
Что-то мне говорит, что надо смотреть в сторону MAX7219. Он по 3м проводам контролирует как раз 64 диода (8*8 тут (4+4)*(4+4)). К нему стандартная библиотека Ledcontrol.h
Далее рыть в сторону SD-reader. С которого считывать и заливать кадры. Сами кадры можно и нужно на компе попрописывать, благо виндовый калк умеет перевести с бинарного в окт дабы поформировать по 8 байт из 64 битного кадра.
Что-то мне говорит, что надо смотреть в сторону MAX7219. Он по 3м проводам контролирует как раз 64 диода (8*8 тут (4+4)*(4+4)). К нему стандартная библиотека Ledcontrol.h
Далее рыть в сторону SD-reader. С которого считывать и заливать кадры. Сами кадры можно и нужно на компе попрописывать, благо виндовый калк умеет перевести с бинарного в окт дабы поформировать по 8 байт из 64 битного кадра.
Ни чего не понял из того что вы написали, к сожалению........
Max7219 - по 3м проводам контролирует 64 диода. Включить можна последовательно до 8 шт (например на куб 8*8*8), причем без особых переделок логики. Программу свечения можна переделать на показ кадров записанных на SD карту. 1 кадр=8 байт(64бита) итого на 10к/с, минута 8*10*60=4800 байт. Собирать кадры и писать на карту на РС.
Что-то мне говорит, что надо смотреть в сторону MAX7219.
Что-то мне говорит, что надо смотреть в сторону MAX7219.
Так MAX7219 это микросхема, которую нужно дополнительно впаять в мою уже существующую?
простите, но это не для меня) я задался сделать куб 4х4х4, в UNO выходов как раз хватает, поэтому не вижу смысла что то менять и усложнять! Тема изначально было создана чтобы создать (или понять как создать) скетч, и в дальнейшем по возможности оптимизировать его!
Зачем? Аппаратная часть уже собрана, причем адекватно. Вы так как не знаете как описать динамическую индикацию предлагаете все перепаять и добавить еще микруху из-за готовой библиотеки?
Только хардкор?
Суть предложения в возможности масштабирования, смены паттернов без перепрошивки, упрощения работы "художника". Мало?
Это все хорошо, но в данном случае когда речь идет о кубе 4х4х4 это неверный подход, тем более если хочется понять и разобраться с динамической индикацией.
Ок, не буду спорить. Сам тут постоянно влипаю в "полезные советы" вместо ответа на конкретный вопрос.
Ребят, дайте команду повтора?!
есть вот такое:
for(int p = 0; p < 16; p++) digitalWrite(LEDPin[p], HIGH);
for(int l = 0; l < 4; l++) digitalWrite(LayerPin[l], HIGH);
delay(1000);
\\1 раз
for(int p = 0; p < 16; p++) digitalWrite(LEDPin[p], HIGH);
for(int l = 0; l < 4; l++) digitalWrite(LayerPin[l], HIGH);
delay(1000);
\\2 раз
for(int p = 0; p < 16; p++) digitalWrite(LEDPin[p], HIGH);
for(int l = 0; l < 4; l++) digitalWrite(LayerPin[l], HIGH);
delay(1000);
for(int p = 0; p < 16; p++) digitalWrite(LEDPin[p], HIGH);
for(int l = 0; l < 4; l++) digitalWrite(LayerPin[l], HIGH);
delay(1000);
Хотелось бы исбежать тройного повтора заменив какой то командой?!
Тем же циклом
и почитайте Вставка программного кода в тему/комментарий.
почитать описание языка програмирования религя не позволяет?
а я б ищо делеев натыкал
Тем же циклом
и почитайте Вставка программного кода в тему/комментарий.
спасибо!
про вставку почитаю обязательно!
почитать описание языка програмирования религя не позволяет?
моя религия позволяет делать мне абсолютно все))
описание языка программирования читал и не раз, но там для новичка очень сложно что то понять, точнее читая все понимаешь, но когда пытаешься сделать что то свое, отличающееся от тех примеров которые там приведены, сразу появляются проблемы и вопросы-именно поэтому была создана эта тема
а я б ищо делеев натыкал
а смысл какой в дополнительных делеях? Можете поподробнее объяснить что они в итоге дадут?
Смысл, я так понимаю, сделать некий эффект "поэтажного" разгорания/затухания.
Пока все ваши попытки не имеют никакого намека на динамику. Вы задумывались как, например, зажечь 4 светодиода по диагонали куба?
Если я правильно понял схему, то в лоб никак...
Только поджигая по очереди. тоесть фактически ШИМ на 1/4 мощности.
Точнее мне кажется правильным собрать свою процедуру которая разбивает показ "кадра" на 4 временных отрезка, поджигая по очереди 1 из 4 диодов. Тогда мы добьемся полностью независимого засвета нужных диодов. Возможно прийдется повышать напряжение на диодах.
Смысл, я так понимаю, сделать некий эффект "поэтажного" разгорания/затухания.
Пока все ваши попытки не имеют никакого намека на динамику. Вы задумывались как, например, зажечь 4 светодиода по диагонали куба?
Я уже столкнулся с проблемой зажеч например по одному диоду в разных рядах и не засветить те которые находятся "над" или "под" теми диодами которые необходимо зажечь....но, естественно не догадался как это сделать....пока не возникало острой необходимости в этом, пока хватает "обычных" эффектов)
Но если вы мне поможете реализовать эти сложные для меня эффекты буду вам только благодарен) мне бы хотя бы какой нибудь кусочек скетча для примера, и на его примере я бы попытался что тосделать самостоятельно))
попробуй представить решетку 16*4 (в случае кубика( (4+4+4+4)*4 )из синих и желтых полосок. Так вот на пересечениях ты получишь зеленые точки (пока вроде понятно) тоесть подали питание на все ноги и все зажглось. Если провести 1с и 1ж полоски получим 1 точку, (тоже вроде очевидно). 2с и 1ж = 2 точки в ряд(логично же)... Дальше уже хуже для тебя. Тебе надо 2 точки по диагонали.... 2с и 2ж дадут не 2 а 4 точки по углам квадрата (западло блин). Что делать... Разводить по времени. Сначала 1с1ж, потом другие 1с1ж и так по очереди 50/50... что получим? правильно! 2 мигающие точки по очереди. При достаточной частоте мы уже не заметим мигания, просто светить они будут тусклее.
Дальше строим картинку из 4 линий по 16 точек которые загораются по очереди (в 1 линию то все ОК работает?). Тогда по очереди загораются линейки с нужными значениями, но достаточно быстро, чтобы не заметить что оно мигает. Сразу предупредю. DigitalWrite тут не котируется, менять надо прямой записью в регистры, так намного быстрее т.к. меньше тактов уходит на операцию. Начать то канешна можна и так, но надо быть готовым все переделать.
А теперь главнючая пакость. Т.к. в процессе работы основная программа тоже это время занимает, то на каком то этапе картинка будет замирать что визуально будет выглядеть как неравномерная яркость. А вот для того чтобы этого избежать и нужон драйвер, который сам себе мигает и ничего более не считает. Либо вернемся к чтению кадров с SD карты, т.к. время чтения прогнозируемо и равномерно.
А теперь главнючая пакость. Т.к. в процессе работы основная программа тоже это время занимает, то на каком то этапе картинка будет замирать что визуально будет выглядеть как неравномерная яркость. А вот для того чтобы этого избежать ...
Да и то оно особо и не нужно для анимации эффектов с разрешением 64 бита, просто все эффекты можно менять без задержек используя millis().
тоже трезво... Нам надо где-то от 100Гц... итого 16м/100=160к тактов на операцию... фатит... я как-то об этом зафтыкал. Завтра на 8 7сегментах попробую... благо как раз спаял правда 8+8.
Упсь... а вот теперь я подвис... У меня вышло что надо просчитывать линию, выводить на экран. просчитывать следующую и т.д. Фантазия как это сделать кончилась. Можно показывать по прерыванию по времени, но как тогда считать... Просчет кадра надо вписать в четверть такта, три четверти сидеть в засаде ожидая времени показа, и так по кругу. Жесть.
Всем привет!
Вот примерно что у меня получилось!
<iframe src="http://vk.com/video_ext.php?oid=3308094&id=167005534&hash=f656ba68a5795c1f&hd=1" width="607" height="360" frameborder="0"></iframe>