гирлянда за 1000р
- Войдите на сайт для отправки комментариев
Втр, 03/04/2012 - 16:29
Уважаемые форумчане
А особенно те, кто готов помочь
железо - freeduino nano v5
задача - написать софт
Четыри светодиода включаются поочереди
скорость регулируется кнопками + и -
значение скорости сохраняется в память микроконтроллера и грузится при включении
Максимальный delay 2000, минимальный 100
шаг наверное 50
ps из личного неудачного опыта)))
Не должно быть задержек с изменением скорости при нажатии на кнопку, вызванных тем что программа ждет пока зажгутся все четыри светодиода и дойдет дело до обработки кнопки
Не должно быть задержек - используй прерывания. http://arduino.ru/Reference/AttachInterrupt
Там в конце есть пример, предполагается, что к входу 2 подключена кнопка.
polk, это да.. Но все равно я load и save делать не умею, проковыряюсь неделю.
Кто-нибуть ?
Работа с памятью
http://robocraft.ru/blog/arduino/82.html
Кнопки подключаются к 2 и 3 цифровым выводам и при нажатии кнопка должна замыкать вывод на землю (GND). Вот простой код с использованием задержек и внешних прирываний:
Проверить было не на чем, так что если что-то не правильно будет работать отпишись. И еще шаг 50 мне показался маленьким, так что я сделал 100.
Максим, спасибо
Ты лучший;)
Я завтра проверяю и отпишусь тогда
Проверил, по какой-то причине в прерывании не происходит запись в еепром, пришлось вынести запись в еепром в общий цикл и для своевремеенной записи избавиться от задержек, так же если вы используете микрокнопки, чтобы устранить дребезг контактов, нужно паралельно каждой кнопке поставить конденсатор.
Теперь, т.к. нет задержек, при желании, можно избавиться и от прервываний и обрабатывать кнопки в общем цикле.
Макс, скопировал скетч, занимаюсь подключением) Подскажи пжл как правильно подключить кнопки. Мне знаком вот такой вариант www.arduino.ru/tutorials/button
А ты предлагаешь - все тоже самое только вместо резистора конденсатор?
Нет, вот так:
Отсутствие конденсаторов будет влиять только на дребезг, но работать будет и без них.
Я так и думал) А какой взять конденцатор?
И как тебе денежку кинуть.. тут даже лички нету
Примерно от 1 до 10 мкф, у меня стоят на 1мкф.
Тестирую, замечание правда есть.. Изменение скорости срабатывает только если нажатие на кнопку совпадает с обработкой этого события.. если не совпадает, то ничего не происходит.. Через прерывание с этой точки зрения было бы правильнее< text>
Нет, как раз сейчас кнопки работают через прерывания, а значит мгновенно, одно нажатие +/- 100 миллисекунд.
Попробуйте или без конденсаторов или уменьшите их емкость.
Не, у меня через раз срабатывает.. на медленной скорости это особенно заметно
(у меня вообще без конденсаторов)
Если убрать конденсаторы вообще, то иногда, из-за дребезга, при однократном нажатии вместо одного срабатывания будет происходить два, три, а то и больше.
А как вы определяете срабатывание? Вы скорее всего на медленной скорости не замечаете изменений.
я заметил, что чтобы произошло повышение скорости надо чтобы нажатие на кнопку было приблизительно во время потухания первого-зажигания второго светодиода!
Вот этот скейтч будет выводить в сириал монитор текущее значение переменной Delay :
Залейте его, запустите Serial Monitor и вы должны будете видеть как меняется Delay. У меня прибавляется и убавляется в любой момент времени.
Или вот:
При изменении Delay будет кратковременно мигать светодиод на ардуине, если при нажатии перестал мигать значит Delay в одном из крайних значений.
Спасибо, Макс.. Все работает)
Просто визуально изменения скорости не
сильно ощутимы со значения 20 до где то 6, а я на кнопочки грешил). Кстати дребизгов у меня и без конденсаторов нету..
зы: по поводу оплаты, есть какие-нибуть идеи?
могу на телефон кинуть как вариант
Если перепродаешь, то кидай:
а если для себя, то дарю.
Ок. Не продаю, но все равно кину денежку..)
И последнее наверное.. Я хочу изменить интервал, сделать от 0,5 до 10. И хочу изменить шаг с 1 на 0,5. Пробовал через -=0,5 и +=0,5
не прошло.. Неlp
Ты какой код используешь? С мигающим светодиодом, с сериал-монитором или первый(рабочий)?
С с-монитором:
вот в начале кода можешь менять вот эти 3 параметра:
STEP - Шаг в миллисекундах(целое число)
MIN - Минимальная задержка в миллисекундах(целое число)
MAX - Максимальная задержка в миллисекундах(целое число)
Не пашет. Светододы не горят. Монитор показывает изм значений от 50 до 2000
Скопируйте еще раз, я просто к другим выводам подключался, а в этом коде забыл исправить. У меня другие выводы подключены - LED1, LED2 и т.д.
исправил, все ок
И вот еще:
если нажать обе кнопки одновременно, то мигание поменяет направление и тоже запомнится в eeprom
А можно вопрос по подключению кнопки. Обычно, насколько я понял изучаю теорию (только начал изучать), кнопка подключается еще подтягивающим резистором, чтобы при разомкнутом состояние было определенное значение. А у вас на схеме нет. Просто хочу понять можно ли так подключать? а не будет ли при разомкнутой кнопке гулять значение на порту и вхолостую посылать прерывания?
maksim, классная идея про две кнопки одновременно. В обратную сторону мне не надо, но есть три режима, которые было бы прикольно воплотить. Если возмешься:
1. Все тоже самое только после четвертого светодиода пауза( которую можно задать вначале)
2. Все тоже самое только последлвательность загарания светодиодов - 1 3 2 4
3. Наиболее сложное. Волна расходящаяся из центра и возвращающаяся обратно. Вначале одновременно загораются 2 и 3, гаснут, загораются 1 и 4, гаснут, загораются нововведение 5 и 6, гаснут, загораются 1 и 4
раъзяснение - я добавил 5 и 6 светодиод, которые везде просто горят, и только в третьем режиме задействованы.
Денюшка пришла? Если с этим поможешь тоже в долгу не останусь)
выбранный режим естественно сохраняется и грузится, ну и можно добавить 4. попеременное включение этих трех.
А можно вопрос по подключению кнопки. Обычно, насколько я понял изучаю теорию (только начал изучать), кнопка подключается еще подтягивающим резистором, чтобы при разомкнутом состояние было определенное значение. А у вас на схеме нет. Просто хочу понять можно ли так подключать? а не будет ли при разомкнутой кнопке гулять значение на порту и вхолостую посылать прерывания?
Для того, что бы была "подтяжка" к +5В без внешнего резистора в функции setup() пишишь:
у меня выше в коде 28 и 29 строки
Для того, что бы была "подтяжка" к +5В без внешнего резистора в функции setup() пишишь:
у меня выше в коде 28 и 29 строки
Спасибо. Точно, встроенные подтягивающие резисторы. А не надо тогда еще добавить
Для того, что бы была "подтяжка" к +5В без внешнего резистора в функции setup() пишишь:
у меня выше в коде 28 и 29 строки
Спасибо. Точно, встроенные подтягивающие резисторы. А не надо тогда еще добавить
Нет, не надо, все порты по-умолчанию и так настроены на вход.
Теперь ясно. Спасибо.
Да дошла. Остальное завтра допишу.
Я правильно понял, что крайние (1 и 6) светодиоды во всех кроме 3 режима (и чстично в 4) горят?
ага, всегда горят.. и только в третьем режиме мигают, когда до них дойдет волна.
На деле они крайние.. хотя номера у них 5,6... можно было бы назвать 5,0
А в первом режиме после четвертого светодиода задержка, велечину которой можно задать там где у нас вначале step, min, max
Итого у нас получилось пять режимов:
-Обычный ( то что уже есть)
- С задержкой после 4
- 1324
- Волна из центра вместе с 5 и 6
- И смена всех режимов по кругу.
А задержку лучше сделать пропорционально изменяющейся в зависимости от скорости перебора или просто статическую?
да лучше сделать зависемой
допустим задержка = наш тот делей * 2
Во втором режиме нужно, что бы 4 светодиод тух и была задержка или чтобы оставалься гореть на время задержки?
нужно чтобы гас
Вот потестите пока без последнего режима, задержка DELAY для второго режима измеряется в текущих значениях Delay
Т.е. DELAY 2 означает, что при скрости в 500млс задержка после 4-го светодиода равна 1000млс
По поводу пятого режима - нужно, чтобы все режимы однократно шли по очереди или чтобы можно было задать колличество прохождений режима до перехода к следующему или переход от режима к режиму через заданное время не зависимое от скорости режимов
< text>лучше всего что бы менялись через время t, которое можно задать вначале, только если возможно чтобы "режим "не обрывался, а доходил до конца.
Тестирую- все нормально
Макс, я тебя не сильно замотал ?
Тебя хоть чуть-чуть греют те малюсенькие бонусы которые я тебе выс на телефон?
Я просто созрел для окончательного вида программы. Я бы сделал возможным менять режимы не только двумя кнопками(пусть остаются), но и третьей.
Кроме того, я придумал новый, самый главный для меня режим, который МАКСимально) демонстрирует, то для чего это все и придумано.
Добьем это дело? )
Оказалось что новый режим я и сам смог написать.. Все не так сложно). Значит осталось -третяя кнопка, если это возможно. и попеременная смена режимов