Официальный сайт компании Arduino по адресу arduino.cc
POV-бегущая строка. Нужна помощь новичку.
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Здравствуйте.
Помогите пожалуйста зеленому пользователю ардуино.
Делаю устройство для курсового проекта.
Тема звучит как "Динамичесое светодиодное табло с механической разверткой"
Хочу сделать нечто среднее между propeller clock и бегущей строкой.
Т.е. в механическом воплощении устройсто будет представлять из себя линейку из восьми светодиодов, расположенную вертикально, и вращающуюся вокруг вертикальной оси. Привод от двигателя жесткого диска или кулера (еще не решил).
Со схемным решением тоже более-менее все ясно и просто. Задействуются 8 пинов, на которые из памяти выводится сообщение "постолбцово". Сигнал обратной связи от оптопары. Может быть еще ИК-датчик для приема сигналов управления может быть даже bluetooth-модуль для управления и приема текста, хотя последнее это уже наверное слишком жирно...
Вот с программной частью у меня загвоздка. Может быть уважаемые форумчане помогут набросать скелет будущего скетча для реализации описанных функций?
Заранее спасибо.
Вот такой гаджет, что-ли?
Принцип отображения тот же.
Мое устройство будет чем-то средним между
http://www.youtube.com/watch?v=90ZovgKY91Y&feature=related
и
http://www.youtube.com/watch?v=_OJvh8eZCIk
Часы понравились на видео. Вероятно вторая ссылка должна вести на другое видео? У Вас две ссылки одинаковые.
сорри, исправился
Начните с таблицы символов в массиве, выводе "постолбцово" с задержкой какой нибудь.. Там видно будет.
Сигнал от оптопары - на прерывание, инициализирующее вывод.
Оптопара одна? Некий "стартовый" позишн? Задержки подбирать будете методом тыка? Или искать вариант отслеживать несколько положений и / или контрлировать скорость вращения?
да, один импульс на оборот
задержкой после него подбираем место начала строки
дальше ширина символов подбирается "на глаз" изменением длительности свечения одного столбца
не хочется сильно усложнять устройство
ну вот, обыграйте цикл вывода из массива
переменная со строкой вывода => разбор и определение элементов массива, где хранятся "светодиоды которые горят", по каждому массиву цикл по "столбцам" и вывод из на пины, задержка. Все)
эту часть алгоритма я и сам осмыслил... но "все" здесь только для неподвижной строки
пока главный вопрос - как организовать ее движение?
по каждому массиву цикл по "столбцам" и вывод из на пины [каждого столбца по очереди], задержка
Предположим символ "А"
эту часть алгоритма я и сам осмыслил... но "все" здесь только для неподвижной строки
пока главный вопрос - как организовать ее движение?
Ну, так, например:
code.google.com/p/povglobe/,
ytai-mer.blogspot.com/2010/08/pov-globe-part-ii-mechanics.html,
hackedgadgets.com/2010/05/03/rotating-led-globe/, akikorhonen.org/projects.php,
www.eee.manchester.ac.uk/undergraduate/electronicsclub/POV/
или по-рюсськи:
easyelectronics.ru/3d-led-globus.html
Задайте в Google "pov led mechanic" и гребите идеи лопатой.
А если так?
Тогда уж так (в предположении, что pin0...pin7 соответствуют выводам D0...D7, то есть тютелька в тютельку расположены в пределах одного порта микроконтроллера, а именно порта D):
или - если кровь из носа необходим UART (выводы D0-D1) - используем группы по 4 вывода в разных регистрах ввода вывода, например, младшую часть порта B и старшую часть порта D. Возможны и другие группировки, но эта - самая экономная по количеству необходимых дополнительных преобразований:
Чего добъемся вышеприведенными извращениями?
Во-первых, код чуть-чуть компактнее (и не сложнее исходного в понимании, если иметь представление о портах ввода/вывода и логических опреациях).
Во-вторых, раз в десять быстрее, поскольку избавились от череды выделений отдельных битов и бесконечных вычислений соответствия между выводами в нумерации Arduino (D0...D13, A0...A5) и AVR-адресацией (PORTB.0, PORTC.5, PORTD7 и еще 17 другими подобными адресами).
спасибо, первый вариант вообще красивый))
Подскажите еще плиз, а есть ли функция, которая возвращала бы размер массива?
спасибо, первый вариант вообще красивый))
Подскажите еще плиз, а есть ли функция, которая возвращала бы размер массива?
а вы хотите создавать массив, неизвестного размера? мне не очень давно хороший человек обрисовал тупиковость этого пути в небольших МК.
В общем, при работе с данными проще всего отслеживать конец "данных" наличием символа 0. Например, при чтении строки с ЕЕПРОМ. И это правильно.
Подскажите еще плиз, а есть ли функция, которая возвращала бы размер массива?
Если я правильно понимаю, вы не хотите ручками подсчитывать длину?
Разместите за массивом переменную. Разность адреса этой переменной и адреса первого элемента масива (т.е. элемента с индексом 0) - искомая длина. По крайней мере для массивов типа byte и char.
Пример. Выводим адреса и размеры переменных a, s, c:
Получаем:
a: 111 3 .
s: 114 14 .
c: 122 1 .
Да, еще: при проверке выяснил, что установленная за переменной/строкой/массивом переменная тоже должна быть проинициализирована. Обычные переменные, похоже, сохраняются в отдельной секции и между проинициализированными и обычными переменными образуется разрыв в несколько байтов.
Простите, не совсем понял Ваш пример.
Зачем используется Serial?
Можете расписать применительно для моего случая?
Serial используется для того, чтобы глазками посмотреть на результат вычисления.
Вы можете скопировать вышеприведенный скетч, залить в свое устройство и побаловаться с вычислением длины различных переменных.
Ну а в вашем случае должно быть что-то вроде:
votodef, столкнулся тоже с данной работой и у меня возникли некоторые проблемы по поводу реализации POV бегущей строки. Если вы еще находитесь на этом форуме, то отпишите мне на mail: serious.downСАБАКАyandex.ru
подскажите зеленому . собираю pov надпись на колесо(на основе старого колпака-не суть важна, так для определения понятия)
диоды вертикально(подругому ни как)
итого 9 пикселей в вертикали
далее скетч