запустить действие на нужное время и заблокировать переменную
- Войдите на сайт для отправки комментариев
Пт, 06/10/2017 - 14:26
Есть такая вот задача
при смене состояние "кнопки"
зафиксировать флаг аварии на 0 на пол секунды.
Вот сижу и ломаю голову... как так поступить..
if (PrevKonvFlag != KonvFlag ) { FlagAlarm = 0; if (millis() - PauseAlarmkonveyor >500) { PauseAlarmkonveyor = millis(); пока идет 500 то FlagAlarm = 0 ; } PrevKonvFlag != KonvFlag; }
В принципе во время переключения конвеера псторонних функций которые включали бы аварию- нет. Включает аварию чисто из-за помех, скетч пишу без делаев, возможно из-за этого
здесь ошибка
Вот у Вас все посты одинаковые. Вы когда-нибудь научитесь формулировать задачу, чтобы её понимал кто-нибудь кроме Вас? Выньте жвачку изо рта и скажите внятно что-нибудь вроде такого:
1. Имеется флаг, который в нормальнос момстоянии - false;
2. Нужна процедура, которая взводит его в состояние true;
3. Будучи взведён он остаётся true в течение времени Т, независимо от того проверяет его кто-то или нет;
4. Через время Т он снова становится false
5. Если после взведения, но до истечения времени T, его взведут ещё раз, то время T заново начинает отсчитываться с момента последнего взвода.
Вот примерно так опишите задачу.
Есть такая вот задача
при смене состояние "кнопки"
зафиксировать флаг аварии на 0 на пол секунды.
Примерно так, навскидку:
"Вот у Вас все посты одинаковые. Вы когда-нибудь научитесь формулировать задачу, чтобы её понимал кто-нибудь кроме Вас?"
-в точку.... сам вижу когда перечитываю(такое ощущение что писал мастер еда из звездных войн.
но мышление не стандартное, как то врач сказал- с таким жить можно)))
p.s
Сейчас проверю пример из 3 поста
Сейчас проверю пример из 3 поста
Лучше задачу чётко сформулируйте :))))
Пока толком не знаете куда плыть, ни один ветер не попутный :)
Есть:
и вот есть задача
if кнопка (49)меняет свое состояние (важно!)
{
FlagAlarm становится НОЛЕМ на 1 секунду (не через секунду и не циклом а разово)
{
вот в принципе и все. ну и без делаев естественно))
Ну, я же Вам привёл пример. ВОт скажите, а что если в течение этой секунды кнопка ещё раз нажмётся? И ещё - кто делает Ваш флаг единицей?
Пусть нажимется хоть это и исключено , это образно кнопка ресет. а вообще я подставлю эту операцию при срабатывании поворотных механизмов - они вертятся больше 3-ох секунд а дребезга на входе нет, так как входа через оптроны с подтяжкой. Во время переворота или обратно флаг аварии будет 0.
этот флаг аварии меняется от состояния концевиков этих же поворотных механизмов. Но в момент переворота на самом деле аварии нет. там все сделанно чтоб это учитывалось (и я это уже отловил). Но ошибка появляется, возможно из-за модуля реле так как он лежит прям рядом возле арды, потому как вываливается после отключения 4ох катушек реле.Но суть в том что все равно хочу убрать этот не красивый момент.
по вашему примеру я не смогу описать((
не умею
1. Имеется флаг, который в нормальном состоянии = 0;
2. При изменении состояния кнопки флаг = 0;
3. Будучи взведён он остаётся =0 в течение времени Т, независимо от того проверяет его кто-то или нет;
4. Через время Т он просто свободен
5. Если после взведения, но до истечения времени T, его взведут ещё раз, то пофиг.
Вот примерно так .
Вот что такое "просто свободен"? Равен 1 или пофиг чему он равен? Мы сами его хоть когда-нибудь делаем не нулём?
тоисть его другие функции уже меняют как хотят. а пока взведен- он блокируется.
Ооооо, тока щас дошло. Так его ещё и блокировать надо.
Без изменения других функций этого не сделать никак.
Вообще, тут нужен класс переопределённой операцией присваивания. Чтобы при присваивании проверялись условия и он соответсвенно менялся или нет.
O_o ладно, тогда просто взводить на 0 при изменении сотояния кнопки на 1 сек. На остальное не смотреть. если после него что опять его изменит то пусть меняет.
...мялть.. вот пишу и сам уже понимаю что дошел до что сам могу себе ответить.,
if (старое состояние кнопки != сотоянию кнопки)
{
FlagAlarm = 0;
старое состояние кнопки = равно состоянию кнопки;
}
и какой нафиг одна секунда нужна, если МК и так это будет держать до нового события которе этот флаг заменит на то что ему надо и без указаной одной секунды. ведь суть регистров такова что они взяли и держут. сами не изменят.
ладно, тогда самый простой способ следить за изменинием кнопки ( в разделе про кнопки есть все кроме этого)
Вообще, тут нужен класс переопределённой операцией присваивания. Чтобы при присваивании проверялись условия и он соответсвенно менялся или нет.
ага. еще один флаг
и в каждой функции в конце дописывать (где затронут флаг аварии) что если есть этот флаг верно то изменять флаг аварии на ноль. тогда получается мнимая блокировка. тоисть . это я сначала так думал развивать идею. Но так как у меня ловит помехи а не условия то сейчас если программно не удасться, то есть уже модули спец. там релюха с таймером (оф-делайн), наверное как раз для таких ситуаций сделано было.
вообще сейчас вот поварил немного, оптимально будет так: что после изменения состояния кнопки переменная тупо внаглую пишется нолем пол секунды постоянно и все. даже если дальше по циклу ее в эти пол секунды все равно что-то попытается переписать то один фиг устройства не успеют сработать.
вот как реализовать действие сие... Прошу подсобить.
Пока остановился на этом:
тупо после пол секунды сбивает аварию, устройства не успевают реагировать. ну и кричалки на всяк случай выкл. мало ли что проскочит.
но вопрос выше остается актуален.
и в каждой функции в конце дописывать
Да, нет, конечно. Ничего дописывать не надо. Надо создать собственный тип данных, который адекватно реагирует на присваивание.
Вот по этой причине я предлагаю переходить от связки "заказчик"-"программист" к связке "заказчик"-"посредник"-"программист". даже если все это один человек. "Заказчик" четко должен выложить свои хотелки, потом "посредник" должен выявить структуру, и наконец "программист" приступить к коду, предварительно ознакомившись со структурой и выявить ту часть, где нужен код, а где просто контент. С одной стороны замедленый старт, но зато нет таких тупоков, которые показывает ТС.
тс в первую очередь вообще то для себя пытается понять.
и показывает на что знаний хватает.
тут пол форума тупаки показывает и что? всех в заказчики?
Bот вам и говорю где у вас тупаки. У вас неправильный подход к написанию программы. Да и у большинства постящих на форуме посты тоже. Я тоже из таких тупаков вылазил. Попробую на аналогиях. Вы наверно выдели... книгу в бумаге. Писатель написал, читатели читают. И где здесь аналогия работы "программиста". Так вот наборщик,типографщик и переплетчик и есть эта работа. Получается блок бумаги- вот это и есть оптимальный код. Как ардуинщики лепят программы. Так они лепят куски из разных источников. Где-то отрывок из конспекта, где-то бумага из под рыбы, где-то вообще кусок туалетной бумаги из мусорника. Залить клеем , скрепками и скотчем и готово. Вот только не все можно открыть и прочитать.
Отвлекся . Отделяйте код программы от контента . И не надо это смешивать .
Отвлекся . Отделяйте код программы от контента . И не надо это смешивать .
вон оно что...))
подскажите тогда как задавать подобные вопросы как в 14 посту. (последний вопрос) там нет кода но вопрос именно по программированию.
Вообще самому не нравится когда код в тексте. не читаемо.
maxvalin. У вас проблемма не в программировании. Синтаксис Си и Си++ достаточно простой. Что такое программирование- переложение решения задачи на язык кода. Контент это не только текст, картинки, по и выполнение некоторой последовательности на внешнюю среду. С использованием delay() все просто . Там идет жесткая последовательность. С millis() немного иначе. Создается тип данных в которую пишется контент. И потом автомат ее проигрывает. Или перестает проигрывать и переключается на другой контент.
: что после изменения состояния кнопки переменная тупо внаглую пишется нолем пол секунды постоянно и все. даже если дальше по циклу ее в эти пол секунды все равно что-то попытается переписать то один фиг устройства не успеют сработать.
Как же быть с этим вопросом? На пальцах можно хотя бы? Как работают миллисы я кое-как понял и активно использую. Но разница большая между тем как что-то сделать после определенного периода и делать что то определенный период.
Никакой. #147 Просто вы не до конца разобрались. Вот и разница у вас есть между тем, что вы кое как умеете и тем за что вы не брались.
ПС: это тоже не идеал. Но все же вам на подумать.
qwone, кончайте издеватся со своим "от связки "заказчик"-"программист" к связке "заказчик"-"посредник"-"программист". даже если все это один человек. " У ТС и так мозги выворотом, а Вы ему еще свое мутное "3 in 1" парите. Проявите гуманизм.
Logik, это нормальное бушидо для программистов. Эсли человек не сможет разобраться в аллегориях и метафорах, то как он сможет разобраться в скетче.
ПС: для "продвинутых" : программа это текст аллегорий и метафор написаных на языке программирования. Это так просто.
Елы палы и в третий раз он пошел в лез за елкой))
Вы можете отодвинуть свои алегории немного в сторону и ответить наконец то на совсем легкий вопрос (для вас)
Если (что то)
{
Сразу Выполняю одно и тоже действие Т время. Цыкл за циклом.
}
Я не претендую на что то если что. Все делаю для себя. И стараюсь как могу. Хотя бы за это проявите уважение)
Чтобы мне помочь не надо говорить какой я танцор, укажите где хирург лучше)))))
maxvalin, в том то и дело, что нельзя пойти в лес за елкой только с помощью одной ноги и одной руки, а остальное оставить дома, что бы не мерзло. В лес приходится идти целиком. А если еще рациональнее , то совмещать этот поход в лес с какой-то работой. А вот если вы совместите поход в лес с просмотром футбола на диване у телевизора. То или елки не будет , или футбол не увидите. Это я к тому, что скетч должен быть целиком , а не кусочками.
Один большой цикл в нем
{
проверим выполняется ли действие, если да
{
проверим не истекло ли время выполнения действия если да
{
выполняем действие
} иначе
{
завершаем действие (если нужно некое особое завершение) и запоминаем что действие не выполняется
}
} иначе
{
проверим нужно ли начать делать Действие, если да
{
начинаем действие (если нужно некое особое начинание) и запоминаем что действие выполняется
}
}
}
Понаблюдайте за собой. По такому алгоритму люди делают практически все длительные операции: варят еду, сушат белье и т.д. Делеев в жизни почти нет, разве что в очереди ждать чего.
Добавлю код
Но вот какая проблема, код вроде есть и работает, но вот он скорее всего не впишется в вашу программу.
домашние проблемы не дают присесть((
значит вот то что наскрябал я.(не хотелось это вываливать ибо читать все мало кому захочется.
Надеюсь не надо повторять кто это писал и если плевать то мысленно!
на 697 строке примерно и есть тема разговора, была точнее вчера. так вроди сейчас работает.
Но мне как всега хочется для развития больше. тоисть понять как этот вопрос решается.
За все ответы что выше - Спасибо! но я сейчас только беглым взглядом могу пройтись. Даст Бог вечером может присяду и повнимательней пройдусь.
Мда,глядя на ваш скетч так и хочется воскликнуть ...Христос Воскресе! (шутка) .. Си++ жив и не надо записывать его в покойники.
ПС: Изучите это