не просто мигать а определенные сигналы.
- Войдите на сайт для отправки комментариев
// Массив режимов работы светодиода byte modes[] = { 0B00000000, //Светодиод выключен 0B11111111, //Горит постоянно 0B00001111, //Мигание по 0.5 сек 0B00000001, //Короткая вспышка раз в секунду 0B00000101, //Две короткие вспышки раз в секунду 0B00010101, //Три короткие вспышки раз в секунду 0B01010101 //Частые короткие вспышки (4 раза в секунду) }; uint32_t ms, ms1 = 0, ms2 = 0; uint8_t blink_loop = 0; uint8_t blink_mode = 0; uint8_t modes_count = 0; void setup() { pinMode(13, OUTPUT); digitalWrite(13, LOW); modes_count = 1; blink_mode = modes[modes_count]; } void loop() { ms = millis(); // Событие срабатывающее каждые 125 мс if( ( ms - ms1 ) > 125|| ms < ms1 ){ ms1 = ms; // Режим светодиода ищем по битовой маске if( blink_mode & 1<<(blink_loop&0x07) ) digitalWrite(13, HIGH); else digitalWrite(13, LOW); blink_loop++; } // Этот код служит для демонстрации переключения режимов // Один раз в 5 секунд меняем эффект if( ( ms - ms2 ) > 5000|| ms < ms2 ){ ms2 = ms; blink_mode = modes[modes_count++]; if( modes_count >= 7 )modes_count = 1; } }
Добрый день!
что-то началал копать на форуме по этому вопросу а оказывается всех в основном устраивает просто мигать светодиодом. Сейчас вот начинаю набрасывать управление частью чпу и хотелось бы задействовать свет как индикацию о ошибке. Тоисть мигать определенные сигналы. В принципе задача понятна для самого и выполнима, но я уже знаю какими это сложностями попахивает. Ведь моей грамотности сейчас хватит на то чтоб нагромоздить каждый аварийный сигнал в виде многорежимных millis-ов. "Сколько гореть, сколько негореть"
Сверху в принципе очень удачный код для того чтоб это дело организовать намного короче, останется добавить флаги . НО ! там упор в одну секунду все. Мне для визуального различия нужно скваженность и 2 и 4 секунды между вспышками, тоисть по разному.
P.S естественно о delay речи нет.
мои таймеры не предлагать?
https://github.com/DetSimen/Arduino-
Сверху в принципе очень удачный код для того чтоб это дело организовать намного короче, останется добавить флаги . НО ! там упор в одну секунду все. Мне для визуального различия нужно скваженность и 2 и 4 секунды между вспышками, тоисть по разному.
Ну не такой уж он и упор. Автор взял на 8 бит (8 возможных состояний) одну секунду и получил свою константу 125 мс на одно состояние. Что мешает взять 2 или 4 или сколько Вам надо секунд?
Да с удовольствием!, если там только делаев нет.
ну и переменные в стиле unsigned long )))
P.S естественно о delay речи нет.
а собственно почему ? у Вас что то еще одновременно должно выполняться ?
Вот ошибка вот Вы мигаете, все остановлено и ждет реакции опреатора на кнопку... так в чем сакральный смысл не применять делаи ?
DetSimen - красиво, только в чем отличия по функционалу от библитеки TimerOne?
Сверху в принципе очень удачный код для того чтоб это дело организовать намного короче, останется добавить флаги . НО ! там упор в одну секунду все. Мне для визуального различия нужно скваженность и 2 и 4 секунды между вспышками, тоисть по разному.
Ну не такой уж он и упор. Автор взял на 8 бит (8 возможных состояний) одну секунду и получил свою константу 125 мс на одно состояние. Что мешает взять 2 или 4 или сколько Вам надо секунд?
этот момент разжуйте пожалуйста. не сталкивался "Автор взял на 8 бит (8 возможных состояний) одну секунду и получил свою константу 125 мс на одно состояние." Пишу для меги там памяти хватит.
Да, мне действительно в 4 секунды возможно хватит а если бы на 6-8 секунд, было бы здорово.
оказывается всех в основном устраивает просто мигать светодиодом.
Это точно! А для чего ещё всё это создавалось?
мигать определенные сигналы
Типа такого: −− −−− •−• −•• •− •−•−•− −− −−− •−• −•• •− •−•−•− •−•− −•− •• •−• •−−• •• −−−• •−•−•− •• −•• ••− −• •− ••• −••• •−•• •• •••− • −• •• • •−•−•− •−−• •−• •• • −− ?
там упор в одну секунду все. Мне для визуального различия нужно скваженность и 2 и 4 секунды между вспышками, тоисть по разному.
Дык добавьте к сигналу, ещё и длительность и будет Вам счастье.
естественно о delay речи нет.
delay - самый естественный способ организации задержки. Естественнее не бывает. А у Вас он "естественно" отбрасывается. Странно как-то.
P.S естественно о delay речи нет.
а собственно почему ? у Вас что то еще одновременно должно выполняться ?
Вот ошибка вот Вы мигаете, все остановлено и ждет реакции опреатора на кнопку... так в чем сакральный смысл не применять делаи ?
DetSimen - красиво, только в чем отличия по функционалу от библитеки TimerOne?
Уважаемый))
Давайте не будем на тему "а почему бы и нет?" Ну действительно делаи не нужны. Я конечно нуб против вас но поставленные задачи уже понимаю и естественно понимаю что делай мне зараза будет вредить. Да , там еще висит много чего_ управление механизмами поворота отражателей, трансформаторы для UV ламп и.т.д
DetSimen - красиво, только в чем отличия по функционалу от библитеки TimerOne?
Не занимает 16 разрядный таймер.
Можно настроить 16 независимых таймеров из одного (может и больше, но не пробовал) мне в самом сложном случае хватало 11 таймеров
Интервалы меняются на лету
можно выборочно останавливать/запускать таймеры
этот момент разжуйте пожалуйста. не сталкивался "Автор взял на 8 бит (8 возможных состояний) одну секунду и получил свою константу 125 мс на одно состояние." Пишу для меги там памяти хватит.
В коде "магическую константу" 125 мс видите? Откуда она? У автора одна последовательность кодируется в 8 битах. Секунду разделить на 8 получится 125 мс. Это минимальное время на одно состояние светодиода. Соответственно если есть у него последовательность 00001111, то 4х0.125=0.5 полсекунды он не горит, и полсекунды горит. Сделайте его больше и всё.
Типа такого: −− −−− •−• −•• •− •−•−•− −− −−− •−• −•• •− •−•−•− •−•− −•− •• •−• •−−• •• −−−• •−•−•− •• −•• ••− −• •− ••• −••• •−•• •• •••− • −• •• • •−•−•− •−−• •−• •• • −− ?
Именно, именно уважаемый!
взял DetSimen библиотеку, даже если и не пойдет сюда то все равно отложу - применение найдется!
В пиринципе хороший вариант с биттовым вариантом. Сейчас "переварю" попробую для себя . Хорош простотой.
Спасибо за объяснение!
В коде "магическую константу" 125 мс видите? Откуда она? У автора одна последовательность кодируется в 8 битах. Секунду разделить на 8 получится 125 мс. Это минимальное время на одно состояние светодиода. Соответственно если есть у него последовательность 00001111, то 4х0.125=0.5 полсекунды он не горит, и полсекунды горит. Сделайте его больше и всё.
думаю каким образом больше сделать...
использовать uint32_t ? блин.. нету практики
Вот тут еще 2 варианта мигания диодом по разным алгоритмам
http://arduino.ru/forum/programmirovanie/klassy-arduino-po-qwone-dlya-ch...
Я конечно извиняюсь со своими глупым советами, но можно реализовать индикацию по другому, на пример 3-х цветный диод дает нам 6 вполне различимых цветов для разных ошибок, если нужно больше можно 7 сегментный дисплей там по мимо 10 цифр еще и буковки можно рисовать...
В пиринципе хороший вариант с биттовым вариантом.
"Вариант с битовым вариантом" требует фиксированной длительности сигнала целиком. Т.е. любой сигнал суммарно длится одно и тоже время.
Вариант же в котором явно задаются длительности этого ограничения лишен и делается на библиотекте от DetSimen.
да выражения "светик" не имелось ввиду светодиодик на ноге который лежит на столе и вот захотелось помигать им)))
Светик это 5 каналов сигнализации системы "маяк" свет+звук. Ну естественно через реле. А насчет дисплея это легче чем делать сигнал морзе на светодиодах. Затык только в длинне кабеля от камня до дисплея, но суть не в этом все же. Вот конкретно цель в тз. сижу курю как проще будет.
Сегодня я пас, завтра помогу разобраться, если решишь моими таймерами пользоваца
да вот как раз таки залез в uTimerList.cpp ))
там правда было и на гитхабе хорошо описано.
Дело в том что посмотрев на "битовый" вариант, немного не нравится простыня, код то у меня и без этого будет не маленький, там только переменных с входами-выходами около 60ти. Хотелось естественно отдельной функцией вызывать. как-то под флаг сделать ибо по пяти каналам надо будет в разные ситуации выводить а не на все сразу..
почитав описание:
воткнул в папку. скопировал пример от туда же блинк.
не компилирует.
Тогда прокомпилируйте это. Да там частоту мигания светодиода можно задавать.
этот нормально пошел. Надо только разобраться как на нем "сыграть"
А что там раздумывать нажимать на кнопки и смотреть.
думаю каким образом больше сделать...
использовать uint32_t ? блин.. нету практики
Я что ли так косноязычен стал... Какие uint32? Вместо 125 в вашем примере напишите 500 хотя бы. Всё. Посмотрите, что изменилось.
да вот как раз таки залез в uTimerList.cpp ))
не компилирует.
Поправил с утра. Должно компилироваться.
Я, блин, в Visual Studio работаю, не знаю, как в Ардубино ИДЕ добавить в проект файл uTimepList.cpp. Заголовочный среда видит, а тельце класса (*.cpp) - нет. Может подскажет хто?
как в Ардубино ИДЕ добавить в проект файл uTimepList.cpp. Заголовочный среда видит, а тельце класса (*.cpp) - нет. Может подскажет хто?
ну, так должно подхватиться всё:
в файле Click.cpp #include <Click.h> - бросить файлы в одну папку.
Спасибо. Пусть ТС пропробует. Почему-то же ведь не компилилось у него.
У мня в VS все нормально подхватывается, если файлы в той же папке с проектом лежат.
Спасибо. Пусть ТС пропробует. Почему-то же ведь не компилилось у него.
У мня в VS все нормально подхватывается, если файлы в той же папке с проектом лежат.
Доброе утро!
-перезаливали на гитхабе?
скачал по-новой и от туда же блинк. вот что выдает
ОУ!!!!!!!!
прошу прощения!
сам написал.сам прочитал.сам нашел....
; неустановлена была.
все ок! компилирует!
поправьте пожалуйста в примере.
Теперь можно и дальше разбираться. на свежую голову проще лезет)))
И вчера по -видимому было нормально. Но голова была забита(( неразгледел
нет. вчера ошибка была посущественней
readme тоже сейчас поправил
Так а теперь осталось за малым. как сложить "свою" морзянку которая будет выстреливать при определенных if.
можно в статический массив запхать длительности горения и пауз.
В месте, где ошибка, запускать таймер, мигать, потом останавливать (ну или мигать сначала)
надеюсь разберусь)))
DetSimen и последнее:
таймеры не зацепляют "жизненно-важные органы"?
Так а теперь осталось за малым. как сложить "свою" морзянку которая будет выстреливать при определенных if.
И вот тут ты увидишь, что битовый вариант не так плох. Ничего не имею против таймеров DedSimen, но, имхо, как раз для мигания диодами по сложной последовательности это не лучший вариант, ибо придется взводить отдельный таймер для каждого включения и каждого выключения мигалки по каждому каналу... Код будет обьемный и "не прозрачный", кмк
самый неоптимальный вариант
DetSimen и последнее:
таймеры не зацепляют "жизненно-важные органы"?
millis() вреть на 3-4 процента. Точнее, на 6/255;
Так а теперь осталось за малым. как сложить "свою" морзянку которая будет выстреливать при определенных if.
И вот тут ты увидишь, что битовый вариант не так плох. Ничего не имею против таймеров DedSimen, но, имхо, как раз для мигания диодами по сложной последовательности это не лучший вариант, ибо придется взводить отдельный таймер для каждого включения и каждого выключения мигалки по каждому каналу... Код будет обьемный и "не прозрачный", кмк
кстати, да. Если надо отобразить код, в виде морзянки, например, то битовый вариант - СУЩЕСТВЕННО лучше.
И вот тут ты увидишь, что битовый вариант не так плох. Ничего не имею против таймеров DedSimen, но, имхо, как раз для мигания диодами по сложной последовательности это не лучший вариант, ибо придется взводить отдельный таймер для каждого включения и каждого выключения мигалки по каждому каналу... Код будет обьемный и "не прозрачный", кмк
дошел до этого)))
составил флаги и условия на бумаге(это еще не конец), выходит пока-что 21 запуск маяков) как -то тяжело представить "простыньку"
только что поиграл с кодом, в принципе хорош! Но надо глубже изучить возможности. Коментирован хорошо но для меня тяжело пока сгенерировать оптимальный вариант под свои нужды(( В мелких задачах привык "millis-ами паузить" а в подобной как сейчас - уж слишком громоздко выйдет. Разве-что продумать лучше систему флагов. Выходов всего-то 5. а аварий 4 вида. ну и одна общаяя- на выхода сразу. Изначально на общую аварию бегущий огонь предполагал но теперь понимаю что это вообще "запредельно"))
у меня код из #32 заработал. Исправно мигаеть.
у меня код из #32 заработал. Исправно мигаеть.
дак я же за него и заговорил)
мигает!, и переменные можно сменить под свою дудку.
но 21-о условие мигалки... пока что в голове неукладывается. смотрю на битовый вариант.
да, в твоем случае битовый предпочтительней.
Все же спасибо за проделанную работу! (я уже вижу куда их можно применить!- многофункциональное реле времени и.т.д)
Добавьте примеры без цикличности, например где функция будет отрабатывать один раз и тоже неплохо для "новичков-среднячков" когда функция выполнится только от какого-то условия.
ссори за наглость)
дак а чотам делать то
у меня индикатор ошибки так был сделан в каком-то проекте: если состояния ошибки нет, то раз в 5 секунд RGB светодиод мигал зеленым на 50миллисекунд (Heartbit, что всё пока живое и работает). А если ошибка - тот же RGB мигал красным 250/250мс привлекая внимание. На одном таймере.
вот примерчик и надо такой: один таймер на несколько выходов(грубо говоря)
(только по правилам код вставляйте ато сейчас 911 тут-как тут)
возможно тогда и не плохой вариант с таймерами выйдет
то что дали выше для вас просто, но не для нас, когда уже суть понимаешь, но варианты манипуляций надо только видеть, сам к ним еще не в состоянии дойти. Для пятиклашек одним словом! ))
Люди добрые объясните на пальцах 30-ю строку из первого сообщения
вот разъяснения:
попробовал по-бодаться с маской... мдя... и тут не фонтан тоже. Набрал 2 набора(тоисть еще все так эже, только наименовал 2-кой) и флаг в условие добавил чтоб переключаться между режимами, первый набор работает на втором постоянно светится. ХЗ(( пока что опять в ступоре. возможно сам и найду ответ но голова в таком же состоянии уже как и вчера вечером(
(blink_loop&0x07) это равносильно нахождению остатка от деления на 7, нам нужны только цифры от 0 до 7
На 8 на самом деле
почему? почему на 8? Насколько я понял это для того чтоб в остатке всегда была единица получается? Ведь маска 8-битная.
Пожалуйста разжуйте момент с масивом!
Или я себе опухоль заработаю(((
принцип скетча немного разобрал:
в лупе 2 интервала, один для того чтоб переходить между вот этими 0 и1 а второй интервал между всей групкой (наверное правильно маской из масива) и все это крутится блин по-кругу. я уже голову сломал чтоб как-то под свои условия выставить. Понимаю что просто так не получится мигать маской, для этого и созданы два интервала. Но моменты хотя бы обьясните
не думаю чтоб набрать 4 вида мигалок надо воротить четыре раза всю эту простынь. Возможно увеличить сам масив и считывать разные диапазоны масок, например alarm1= с 1 по 10 alarm2 = c11 по 16 и.т.д
добавил
теперь наверное понимаю почему на 8
теперь наверное понимаю почему на 8
Ну, и слава Богу.
в лупе 2 интервала, один для того чтоб переходить между вот этими 0 и1 а второй интервал между всей групкой (наверное правильно маской из масива) и все это крутится блин по-кругу. я уже голову сломал чтоб как-то под свои условия выставить. Понимаю что просто так не получится мигать маской, для этого и созданы два интервала. Но моменты хотя бы обьясните
давай по порядку.
Для мигания маской нужен только один интервал - тот который в скетче первый, 125мс. Второй интервал в том скетче использован, чтобы раз в 5сек менять последовательность морзянки - ну как в китайских елочных гирляндах - чтобы не мигать все время одинаково. Как я понимаю, у тебя схема морзянки зависит от контекста - сл-но, тебе второй интервал не нужен.
Не понимаю, почему "просто так не получится мигать маской"? - как раз там все очень просто, выкини второй интервал и маска будет мигать вечно.
теперь наверное понимаю почему на 8
А зачем автор это делает - понял?
Ключевое слово наверное.
Когда в сериал посмотрел то увидел что при делении на 7 переход осуществляется через 0. Тоисть всего 8 что соответствует одной маске.
Если не так. Обьясните тоже.
Насчет перебора гирлянды: тоисть переход между масками. Но ведь я на этом думал строится алгоритм работы.
Вот сейчас примерно, после ваших слов начал немного понимать. Сделать одну маску а не 10 и увеличить интервал выполнения каждого (регистра- наверное так называется)
А если 8ми состояний мало?
maxvalin, не надо все в одну маску. С какой стати?
может я не верно понимаю, что ты пытаешься сделать? Зачем тебе вообще маски "перебирать"? Я думал. что у тебя через маски делается сигнализация - то есть каждая маска для конкретного случая. Для одного состояния системы - маска1, для второго - маска2, в случае ошибок - маска3 и тд. И если у тебя система, скажем, сутки находится в состоянии2 - значит все эти сутки у тебя должна мигать маска2 и ничего "перебирать" не нужно.