Код для сигнализации
- Войдите на сайт для отправки комментариев
Сильно не бейте я шарю в программировании на СИ и делфи но с ардуино начал аботать недавно. Вопрос в том что как лучше реализовать следующую систему исполнения команд. Задача в том что есть 7 датчиков сигнализации. Они подключены к ардуино мега. Задача: Чтобы ардуино независимо как то каждый опрашивала и если есть сигнал, включала нагрузку на 5 мин. И продолжала опрашивать данные датчики и если получала снова сигнал то снова бы запускала как бы таймер на 5 мин. Вроде ничего сложного если говорить об 1 датчике и 1 нагружке допустим. Но я пока знаю что в ардуино есть раздел void setup и void loop - который повторяеться каждую секунду допустим. но там МК делает все по очереди. А можно ли как то чтобы многозадачность была как бы? Если нет ток как такое организовать? хотя бы натолкните на мясль)) может кто то делал, что похожее? Заранее спасибо всем кто отклюкнулся.
вам сюда http://arduino.ru/forumy/ishchu-ispolnitelya
Отличный ответ, только если бы я хотел кого то нанять я бы и нанял. Я делаю это для себя и хочу сам разобраться так как необходимо будет менять анстрйоки программы. Я не говорю дайте мне код под меня. А подталкните к идее как можно реализовать это.
Многозадачность. Да легко. Вот только программное мышление вам поломает.
Вот возьмите машину- дорогу-водителя (процессор=программа= логика функционирования программы). Это обычное программирование. Можно буквально запарковать машину на середине дороги и ждать нужного события.
Но в многозадачности у вас будет не одна машини на дороге, а целый караван. И вам придется перепрыгиать с руля одной машины на другую. И главное парковать машину на середине дороги нельзя, пока вы управляете другой машиной или ждете события.
Если ждете код, то ловите.
ПС: Ну это не единсвенный вариант.
Да вы сломали мне мозг))) А как думаете может мою задачу можно и другим путем решить. Ну там придумать влаги логические и по ним прогебаться за один цикл. Я так думал. Т.е. МК опрашивает все датчики потом на каждом опросе каждого в зависимости от того есть сигнал или нет устанавливает флаг а в коце цикла он включает нагрузку но как ее включать на 5 мин не зависимо от общего цикла? Ест ьварианты? Т.е. (ДАтчик- сигнал - вкл на 5 мин) пока нагрузка включена он снова опрашивает все это добро и т.д.
Вы просили многозадачность Вам дали! А если по простому то посмотрите на такой код. Задержка стоит 5 сек, если мало добавите
Да вы сломали мне мозг))) А как думаете может мою задачу можно и другим путем решить.
Вот я об этом и говорю. Проблема новичков в программировании в наличии тараканов в голове. Вы видели дорогу с множеством машин. Вот когда все соблюдают правила и не гоняют как шумахеры, то все успеют. Да шумахеры вроде и быстрее едут, но при аварии буквально перекрывают дорогу. Да если у шумахер один на дороге это здорово. А вот если их несколько , то уже не здорово. Так и в программировании. Дернут где-то скечь, а то что в скече есть циклы, задержки и delay() прочие прелести , которые буквально конфликтуют с другими процессами, то потом воют. Учитесь разводить процессы явно и не явно и все у вас получится.
ПС: Вот еще код можете размножить на 5-7 датчиков
Извините меня конечно. Но я не совсем догнал как я смогу это применить к своему проекту в доме( Датчик работает так есть сигнал идет размыкание и МК включает свет мне в погребе на 5 мин и если в течении 5 мин есть снова движение он как бы продляет снова на 5 мин работу лампочки. И вот таких линий с датчиками 5 штук. И каждая должна включаться независимо. Скажите а на МК ардуино можно написать 5 разных процедур таймеров? Чтобы они как бы разные были и я мог бы в loop опрашивать датчики и запускать таймеры котоыре будут по окончанию отключать свет или снова его включать?
Seltvik, ответ на Ваш вопрос банален до невозможности.
Представьте, что не контроллер следит за датчиками и включает нагрузку, а Вы сами.
Т.е. перед Вами есть 5 индикаторов, за которыми нужно следить, 5 тумблеров, включающих нагрузку, одни часы, показывающие время, карандаш и лист бумаги, на котором можно делать рабочие записи. Подробно расскажите, что именно Вы будете делать, если стоит задача отслеживать датчики и после срабатывания каждого включать соответствующую нагрузку на 5 минут.
Как только Вы это напишете, Вам останется только перевести с русского на Си и получится готовый код, т.к. МК будет работать в точности по тому же алгоритму, что и Вы.
Т.е. ваш код например работает с одним реле там все просто)) я бы и сам написал такое)) А у меня и датчиков несколько и реле к каждому свое( Т.е. сработал первый датчик включил реле на 5 мин. пока это реле включенно увидел еще сигнал с датчика 2а включил второе реле на 5 мин первое так и держиться и время идет и т.д.
ну вот смотрите я все объяснил уже))) Вот на си или делфе все просто. Можно сделать на каждый процедуру которая будет вызываться по дейсвтию. Т.е. по сигналу с датчика. Процедура 1 например будет включать нагрузку 1 на 5 мин потом выключать и все банально просто а возможности ардуино я не знаю. гугли вроде таймеры. Он там как я понял один только? так? т.е. отдельными процедурами такое можно разве сделать?
Читал эту тему вроде похоже на мое но не уверен что будет работать как мне надо. Попробую сегодня забацать код. Вот тема если интересно http://arduino.ru/forum/programmirovanie/vklyuchenie-pina-na-opredelennoe-vremya
ну вот смотрите я все объяснил уже))) Вот на си или делфе все просто. Можно сделать на каждый процедуру которая будет вызываться по дейсвтию.
Здесь то же самое. Разница лишь в том, что в Дефи Вы выставляете "галочку" т Делфи вместо Вас анализирует, пора ли вызывать определенную процедуру или нет, а здесь это должен делать Ваш код. А так - все то же самое.
Какая Вас устроит погрешность? max(десятки_микросекунд, время_опроса_датчика) устроит? Тогда не нужны Вам таймеры, делайте все из loop().
))) Извините но не понимаю до окнца суть. Я могу следить одновременно за 7ю индикаторами)) правда одновременно включать не могу. Но это и не нужно пусть будут задержки в милисекунды суть такова чтобы в итоге он включил и основной код работал и независил от того что там он уже включил. Т.е. включил реле 1 на 5 мин и дальше работает опрашивает если появилось движение в течении 5 мин то снова перезапустил таймер как бы. Но так будет и основной код работы с nRf24l01 и т.д. те.е у меня 5 помещений основных подвала чтобы не включать там свет бывает что и забываем выключать его)) чтобы это все делала автоматика. В каждом будет PIR датчик от сигнализации и светодиодный свет там везде он управляеться твердотелыми реле. Все уже собрано осталось написать скетч. Думал в ардуино так же просто как и в Си или делфи для меня))) оказалось не все я знаю))) И вот щас есть идеи но будет ли работать как я хочу не факт. Поэтому и спросил может есть какие то варианты реализации такой системы. Хочется меньше кода сделать и чтобы срабатывало так ка кнадо. Зашел человек в помещение МК включил ему свет на 5 мин, если он ушел следовательно после 5 мин он его отключит. Если было движение в течении 5 мин он с момента последнего движения будет запускать таймер поддержания света там. Вроде теперь ясно объяснил)) Вроде тривиальная задача)) Но как дуб сижу вот и думаю как лучше это на меге сделать(
Вот нашел статью думаю она мне поможет. Щас главное сообразит ькак под себя сделать)) Кому интересно вот она http://arduino-diy.com/arduino-Ispolzuyem-funktsii-delay-i-millis-pravilno
я шарю в программировании на СИ и делфи
...
Задача: Чтобы ардуино независимо как то каждый опрашивала и если есть сигнал, включала нагрузку на 5 мин. И продолжала опрашивать данные датчики и если получала снова сигнал то снова бы запускала как бы таймер на 5 мин.
...
я пока знаю что в ардуино есть раздел void setup и void loop - который повторяеться каждую секунду допустим.
Даааа.... вот и выросло поколение "шарящих" ....
«Дай Бог, чтоб наши дети на обломках самовластья смогли хотя бы что-то написать»
(автора не знаю, но не моё)
Все такие умники)) Капец)) Я в шоке. Программирование в чем то схоже, но синтаксис и набор команд и их вариации я не знаю, вот и просил направить. Я больше чем уверен у многих такое было и многие меня поймут так как программирование например на асемблере это одно, прогарммирование ООП это дургое , программирование Ардуино элементарное, но нужна база она у меня есть. А практики применения всех процедур и вариации у людей тут уже была я так думал и думаю. Так что и спросил. Но как говориться, походу поговорка: "За спрос не бьют" не про ВАС. Спасибо. буду тыркаться пока сам.
Я и так знаю что можно))) У них есть задержка до 3 мин а это маловато и + к тому же они работаю чуть не так. Т.е. есть движение они подали сигнал и он есть 3 мин допустим. А если пропал сразу сигнал тоже и следовательно лампа допустим выключилась и плевать он хотел на время последнего действия.)) Датчики не для света ПИр а для сигнализации с нормально замкнутыми контактами
Я в шоке.
Я тоже. В Ардуино прграммируют на самом обыкновенном С или С++, кому как нравится. А когда человек "шарящий в С" называет loop и setup "разделами", у меня возникает желание напиться и повеситься. Только вот не могу решить что сначала сделать: напиться а потом повеситься, или наоборот.
Я так и думал, что будут тут умники. Спасибо Вам большое всем. Очень помогаете своими комментами)) Ну написал бы я по терминалогии функция, процедура что измениться? То что я учился в универе 20 лет назад. Да многое не помню но база есть. И че я только не писал. Поживете с мое думаю у вас тоже от отсутствия практики часть забудиться. Но спасибо, что вы поумничали и я привлек ваше внимание.
Вот сделал то что надо мне щас буду размножать. Вроде работает на одном примере.
Мгли просто написат ьвам копатьв сторону милс функции вот пример на ссылку и все. Вопрсо закрыт
ЕвгенийП, раслабтесь. Это такие программисты , за которых среда все делает.Программирование с помощью мыше-клика. А вот среда за них не делает, то и ничего у них не получится. Ни в СИ, не в ДЕЛФИ.
Извините но вы не поняли какие у меня датчики))) не такие. У меня профессиональные датчики для сигнализации 12В, которые фирму не скажу. теперь думаю вы поняли какие. Спасибо вам за подсказки и за то, что нашли время на переписку. Если что, как протестирую на нескольких датчиках отпишу сюда и код оставлю, а то мало ли кто еще ищет, а тут такие вон попадаются)) умные всякие))
А в 5# посте - там тоже для одного и на МИЛИС. Не смотрели?
Да смотрел поэтмоу и начал гуглить эту тему про милс)) Просто недопетрел сразу про милс.
Мгли просто написат ьвам копатьв сторону милс функции вот пример на ссылку и все. Вопрсо закрыт
Вот мой код #6. Он такой же, но там опроса датчика нет. Если я поставил бы, то это почти как написать за вас.
Ваш код сложный лишнего много)) вот ваш:
Вот мой:
Вы правильно все сказали я начал рыть в сторону этой функции и понял как сделать проще для себя. Спасибо всем кто откликнулся и даже тем кто сделал важные коменты. Спс еще раз за новодку.
Т.е. я понял что в ардуино не обязательно использовать потоки и т.д. чтобы это хреньсделать. Есть великолепная функция милс) Позже выложу весь код если кому то мало ли пригодиться.
Ну написал бы я по терминалогии функция, процедура что измениться?
Абсолютно ничего. Если бы Вы так написали, Вы показали бы свою безграмотность, но Вы её и так уже показали настолько, что добавить нечего.
я учился в универе
Потребуйте обратно деньги за обучение.
но база есть
Это заметно.
Поживете с мое
Сиё невозможно. Разве что внуки мои.
удмаю что вы брешите. так как взрослый человек с багажом знаний и нормальной совестью. Не будет давать такие комментарии + цепляться к словам. Думаю либо вы обманываете и вы юноша, а если и врозлый, думаю Вас чем то жизнь обидела настолько, что вы свои негатив выплескиваете здесь на форуме. Я таких видел и не раз. В любом раскладе мне Вас жаль. Но вы сделали мой день. Спасибо)))) И спасибо тем кто здесь на форуме чтобы направлять и помогать. независимо от несуразных слов и выражений, а не для того чтобы преследовать цель кого то затролить или поумничать. А самое интересно что вы находите время и пишите и редактите комент с цитатами, тратите время. Думаю правда Вас чем то жизнь обидела)) или вы просто такой человек. Я вас не виню)) есть такие. Все мы разные. Спасибо
или вы просто такой человек.
Да, я просто такой человек. Когда я слышу, что человек "шарит" в С и при том не может на этом самом С три датчика опросить, .... ну, вот такой я человек.
Ну если бы я выложил этот . Вы бы в нем разобрались. Да вы бы на него тупо забили бы. Ну и зачем мне корячится.
Вот я не лез с ним.
Так я и не просил дат ьмне код сразу)) Я просил навести меня так как я не люблю все готовое. Ибо мне с этим работать и править еще. Следовательно надо разбираться самому) Спасибо еще раз. Мир не без добрых людей) Ну и с разынми обиженными, не без этого)
И да вы Си и язык ардуино похоже но не совсем одно и то же. Там проще в плане ООП и функционала больше чем тут тут все проще согласен, но надо иметь базу, практику работы с МК. Так как есть свои особенности. Но все же спасибо что потратили время но очень важные комментарии. Особенно с цитатами) Тут в каждом посте такие от вас поди)) Кстати вот далеко ходить не надо читал тут тему про милс там тоже Вы : http://arduino.ru/forum/programmirovanie/vklyuchenie-pina-na-opredelennoe-vremya Выливаете снова свою философию и негатив пост 28 так мимо дела)) Много лишнего и от Вас. Вы тартите свое время на такие вещи)) Будьте проще и к людям отностиесь проще. Не все же отцы ардуино или просто очень умные)) Сюда люди идут в первую очередь за советом от знающих. И да не все могут правильно подать мысль или грамотно написать. Как я и сказал все мы разные))
Язык ардуины это чистый C++ к которому добрые разработчики добавили несколько собственных функций для упрощения програмирования чайниками и спятали функцию main();
Вы можете написать всю программу на чистом Си или на С++, без единой функции ардуино и среда это скушает и успешно прошьёт контроллер и программа будет работать. И даже не использовать loop() и setup(); Среда на компиляцию запускает файл c:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino\main.cpp и то что вы написали. Посмотрите. Это для общего развития, что бы понимать как сроится проект на ардуино.
Спасибо. Надо будет попробывать. Вот не без добрых людей же мир)) Я про ардуино не мого знаю. начал изучать функционал вижу что очень много похожего. Но я же всего не знаю)) Но Вам спасибо, приму к сведению. буду разбираться и дальше.
И да вы Си и язык ардуино похоже но не совсем одно и то же.
Вам же уже говорили, что в Ардуино используется С и С++, а Вы опять за своё ... В чём Ваша проблема? Хотите помощи - Вам помогают, объясняют, Вы же упираетесь рогом. Зачем?
Прям как у Зиновьева: "Ибанов - это литературный псевдоним; настоящая его фамилия - Ибанов". Так и Вы "это только похоже на С, а на самом деле там С".
Если Вы пришли сюда
за советом от знающих
так слушайте, что Вам говорят и учитесь. И вообще
Будьте проще
ЕвгенийП, раслабтесь. Это такие программисты , за которых среда все делает.Программирование с помощью мыше-клика. А вот среда за них не делает, то и ничего у них не получится. Ни в СИ, не в ДЕЛФИ.
Так я про то и говорю, что "выросло поколение"....
я шарю в программировании на СИ и делфи
...
Задача: Чтобы ардуино независимо как то каждый опрашивала и если есть сигнал, включала нагрузку на 5 мин. И продолжала опрашивать данные датчики и если получала снова сигнал то снова бы запускала как бы таймер на 5 мин.
...
я пока знаю что в ардуино есть раздел void setup и void loop - который повторяеться каждую секунду допустим.
Даааа.... вот и выросло поколение "шарящих" ....
«Дай Бог, чтоб наши дети на обломках самовластья смогли хотя бы что-то написать»
(автора не знаю, но не моё)
Вот ваш первый коммент. Это так вы помогаете? Цитатами? Да есть люди которые тут реально помогают. Подсказывают. Но думаю это не вы. Покрайне мере вы ничего такого не написали кроме замечаний и выражений чтобы задеть чтоли))) Если Вас кто то в жизни обидел очень. Отпустите это. будьте реально проще к себе и другим. Хорошего дня.
ЕвгенийП, раслабтесь. Это такие программисты , за которых среда все делает.Программирование с помощью мыше-клика. А вот среда за них не делает, то и ничего у них не получится. Ни в СИ, не в ДЕЛФИ.
Так я про то и говорю, что "выросло поколение"....
Вот показатель вашего уровня))) Вы даже не знаете сколько человеку лет и пишите про поколение))) Занете в жизни важно какой вы человек а не какой вы программист или юрист. А элементарный показатель морали и человечности это поступки. Но вы этого не знаете или забыли)
А это для тех , кто занимается ООП. Тот же самый код , но в классе. Замечание: компилировал, но в систему не заливал, так как нету ;)
Вот ваш первый коммент. Это так вы помогаете?
А другие комменты Вы не читали? например №19
В Ардуино прграммируют на самом обыкновенном С или С++, кому как нравится.
Видимо, нет, т.к. через час после этого Вы несёте бред
Си и язык ардуино похоже но не совсем одно и то же. Там проще в плане ООП и функционала больше чем тут тут все проще
Впрочем, мне пофигу, я знаю на чём программирую в Ардуино и у меня нет проблемы опросить три датчика. Проблема у Вас, а не у меня. Так что дело Ваше: слушать, что Вам люди говорят или огрызаться.
Только, пожалуйста, не говорите, что Вы "шарите в С". Взбесило именно это. Не будь такого заявления, тон ответов был бы другим. А то, блин ... шарите (и ещё циатата) "а сами зубного порошку наелись третьего дня".
Вот ваш первый коммент. Это так вы помогаете?
А другие комменты Вы не читали? например №19
В Ардуино прграммируют на самом обыкновенном С или С++, кому как нравится.
Видимо, нет, т.к. через час после этого Вы несёте бред
Си и язык ардуино похоже но не совсем одно и то же. Там проще в плане ООП и функционала больше чем тут тут все проще
Впрочем, мне пофигу, я знаю на чём программирую в Ардуино и у меня нет проблемы опросить три датчика. Проблема у Вас, а не у меня. Так что дело Ваше: слушать, что Вам люди говорят или огрызаться.
Только, пожалуйста, не говорите, что Вы "шарите в С". Взбесило именно это. Не будь такого заявления, тон ответов был бы другим. А то, блин ... шарите (и ещё циатата) "а сами зубного порошку наелись третьего дня".
Вы просто нереально сделали мой ДЕНЬ. Причем тут 19 пост ахахаха. Вы с чего начали, я Вам то и показал. Знаете это как ваша логика. Что первое прочитали вы в начале поста и сделали какой то свой вывод. Вы как уж на сковородке))) Знаете поговорку. Встречают по одежке. Вот, что человек должен думать если Вы сразу начинаете с такого поста как первый? И потом уже не важно какой 19 пост или 30 след от Вас. Все одно. Вы в каждой ветке находите момент чтобы просто облить человека. Вы думаю в реальной жини, даже если и реально взрослый человек, просто несчастный и обиженный)) Но не расстраивайтесь. Все будет хорошо. Люди в ваших тараканах не виноваты и поверьте таким как я ваши комменты "не о чем" не нужны. ЗНАЕТЕ как говорят: Проходите мимо. И да по вашим словам, не похоже что Вам за 40)) думаю вы юноша у которого просто в жизни, что то плохо слишком. Что вас бесят посты и заставлют писать грязь или просто "умничать")) Может Вам сходить к кому нить?) Шучу. Всем спамибо еще раз.
А это для тех , кто занимается ООП. Тот же самый код , но в классе. Замечание: компилировал, но в систему не заливал, так как нету ;)
Очень похоже)) спасибо. Но я уже разобрался. не без вашей помощи))) Да сначала так проще как в ООП пишишь функции вначале или процедуры а потом вызываешь их можно кучу отдельных таймеров кинуть. И да синтаксис похож я уже начинаю улавливать суть работы с МК))
Вы просто нереально сделали мой ДЕНЬ.
Я рад за Вас.
Даааа.... вот и выросло поколение "шарящих" ....
«Дай Бог, чтоб наши дети на обломках самовластья смогли хотя бы что-то написать»
(автора не знаю, но не моё)
Да, здесь хватает таких "шарящих", не бери в голову, пусть дальше шарит.
Вы просто нереально сделали мой ДЕНЬ.
Я рад за Вас.
Спс я шутил конечно)) Я согласился же с Вами, что я не так выразился и т.д. Ну дубоват я стал. Но ненадо так к людям. Они сюда не за мнением о себе приходят. А за помощью. не хотите помочь советом не надо)) Вас же не заставляют. А грязь лить много ума не надо или умничать)) Хорошего дня.
Даааа.... вот и выросло поколение "шарящих" ....
«Дай Бог, чтоб наши дети на обломках самовластья смогли хотя бы что-то написать»
(автора не знаю, но не моё)
Да, здесь хватает таких "шарящих", не бери в голову, пусть дальше шарит.
Вам стало легче?)))Надеюсь что да. Еще один очень важный комментарий)) Я даже и не думал, что среди любителей и специалистов по Ардуино здесь так много "СЛИШКОМ" умных))
Видите ли, Seltvik, для того, чтобы наставить человека на путь истинный, его нужно пнуть в нужном направлении. Иногда сильно пнуть. Иногда неоднократно. Т.к. некоторые, испытав на себе пинок, обижаются и вместо того, чтобы следовать в указанном направлении (возможно, назло, а возможно, просто по глупости) пытаются двигаться в прямо противоположном. И нередко потом, даже осознав верно направление, столько перед этим наплутают, что уже и не видно, что в нужном направлении их пинали с самого начала.