код работает почти правильно
- Войдите на сайт для отправки комментариев
всем доброго времени суток. прошу помощи в наладке кода.
пишу скетч сигнализацию для квартиры.
в квартире установленна двойная дверь. назовем их IN_DOOR и OUT_DOOR
на каждой из дверей висят кнопки (концевики).
алгоритм следующий.
1) если открыли одну из дверей и втечениии 6 сек не открыли вторую - тревога давим кнопку вызова
2) если открыли одну из дверей и втечениии 6 сек открыли вторую - значит пришли хозяева обнуляем все флаги
3) снятие с охраны происходит так. если была сработка тревоги flag_alarm==true
а) закрываем наружнюю дверь (OUT_DOOR)
б) нажимаем 5 раз на концевик (IN_DOOR )
на данном этапе отказалсяот класса титановый велосипед. по подсказке Клапауций 112
написал код с нуля. он вроде как работает НО...
1) как то тупит и по факту чтобы снять с охраны надо не 5 раз клацнуть концевик а 8-10 раз
2) можно обмануть программу если постоянно клацать концевик.
тоесть дверь открыл пальцем клацаешь концевик и в это время открываешь вторую дверь.
вторая проблема думаю в даймерах нужно их несколько заводить.
в общем прошу людей знающих ткнуть носом в ошибки.
всем спасибо за помощь. Код прилагаеться
P/S сильно не пинайте я повар - arduino это хобби
/* 1)если постоянно клацать кнопку - alarm не срабатывает 2)медленно работает */ #define IN_DOOR 8 #define OUT_DOOR 9 #define CALL_PIN 13 #define drebezg 500 // время на дребезг контактов #define timer 5000 // за это время надо открыть вторую дверь bool in_state = false; // Ф bool out_state = false; // Л bool in_flag = false; // А bool out_flag = false; // Г bool flag_alarm = false; // И byte couter = 0; // счетчик для сброса alarma uint32_t ms_prev = 0; // переменная времени для дверей //uint32_t ms_alarm = 0; // переменная времени для alarma void setup() { //Serial.begin(9600); //Serial.println("Test button ..."); pinMode(IN_DOOR, INPUT_PULLUP); pinMode(OUT_DOOR, INPUT_PULLUP); pinMode(CALL_PIN, OUTPUT); } void loop() { uint32_t ms = millis(); // ______________________________________________________________________________________ Фиксируем открытие двери IN if ( digitalRead(IN_DOOR) && !in_state && ( ms - ms_prev ) >= drebezg ) { // если дверь открыта и перед этим была закрыта ждем дребезг in_state = true; // меняем статус на "открыто" ms_prev = ms; // запоминаем время if (!in_flag) in_flag = true; // запоминаем что дверь открывалась // Serial.println("In_door Open"); if (flag_alarm == true && !digitalRead(OUT_DOOR)) { couter++; // Serial.print("couter "); // Serial.println(couter); } } // ______________________________________________________________________________________ Фиксируем закрытие двери IN if ( !digitalRead(IN_DOOR) && in_state && ( ms - ms_prev ) >= drebezg) { // если дверь закрыта и перед этим была открыта ждем дребезг in_state = false; // меняем статус на "закрыто" ms_prev = ms; // запоминаем время //Serial.println("In_door Close"); } // ______________________________________________________________________________________ Фиксируем открытие двери OUT if ( digitalRead(OUT_DOOR) && !out_state && ( ms - ms_prev ) >= drebezg ) { out_state = true; ms_prev = ms; // Serial.println("Out_door Open"); if (!out_flag) out_flag = true; } // ______________________________________________________________________________________ Фиксируем закрытие двери OUT if ( !digitalRead(OUT_DOOR) && out_state && ( ms - ms_prev ) >= drebezg) { out_state = false; ms_prev = ms; // Serial.println("Out_door Close"); } // ______________________________________________________________________________________ Фиксируем сработку сирены (вор) if (in_flag != out_flag && flag_alarm == false && (ms - ms_prev ) >= timer ) { // если одна из дверей открыта а вторая закрыта и прошло время "timer" flag_alarm = true; // запоминаем "тревога" ms_prev = ms; // запоминаем время alarm(); // переходим к функции alarm } // ______________________________________________________________________________________ Сброс флагов при правильном открытии (хозяин) if (in_flag == true && out_flag == true) { // если обе двери были открыты if (flag_alarm == false) { // но небыло сработки тревоги in_flag = false; // сбрасываю флаги out_flag = false; } } // ______________________________________________________________________________________ Снятие с охраны if (couter == 5) { flag_alarm = false; digitalWrite(CALL_PIN, LOW); couter = 0; //Serial.print("alarm "); //Serial.println(flag_alarm); } } void alarm() { digitalWrite(CALL_PIN, HIGH); // замыкаем кнопку вызова на телефоне }
Извини, но я программирую в другом стиле, так что ваш код мне тяжело разбирать.
на данном этапе отказалсяот класса титановый велосипед. по подсказке Клапауций 112
официально снимаю с себя ответсвенность за всякого рода ложные интерпретации моих постов.
здесь #365 я не советовал отказываться от класс титановый велосипед для тактовой кнопки.
Извини, но я программирую в другом стиле, так что ваш код мне тяжело разбирать.
и на том спасибо )
товарищ Клапауций 112 возможно вы что подскажете. ну кроме того что код некудышний ))
товарищ Клапауций 112 возможно вы что подскажете. ну кроме того что код некудышний ))
код - не знаю.
алгоритм - никудышний: практически невозможно по модели поведения ползателя дверьми тамбура определить, вор это, твой гость, твои дети ловят собаку или ты сам нажрался и мечешься в белой гарячке, ловя покемонов.
рекомендация: придумай внятный алгоритм идентификации вора.
да все норм же.
пару раз с сиреной после 23-00 откроет двери.
потом соседи ему карму почистят вместе с полицией и все будет работать
да все норм же.
пару раз с сиреной после 23-00 откроет двери.
потом соседи ему карму почистят вместе с полицией и все будет работать
у него не сирена, а звонок на свою мобилу. и, тема про балкон до конца не раскрыта - вор может беспрепятсвенно проникнуть через балкон, но покидать квартиру должен, почему-то через вумный тамбур. #361
Балкон 4 этаж. 5эт.дом. вероятности мало но думаю
исключать её не стоит.
Г-н Клапауций хотелось бы узнать ваше авторитетное мнение какой алгоритм выбрали бы вы в моём случае. Турели не предлагать )
Может не париться и сделать на r fid . тогда появляется вопрос
Насколько они надежны.
*прошу определиться, кто я для тебя - господин или товарищ.
далее... я не являюсь специалистом и, тем более, авторитетом в алгоритмах охранных систем.
но. что бы сделал я - сходил бы к своему участковому и попросил у него статистику взлома квартир своего района выше 3-го этажа за последние 5-ть лет. опубликовал бы статистику сюда - внезапно может оказаться, что вероятность взлома твоей квартиры ниже попадания метеорита в твой дом.
В каком плане надёжны? Карта легко ломается рукой напополам.
Если носить карту в кошельке, обёрнутом фольгой, с гарантией того, что её не сдампят, то можно забить всю карту рандом значениями, тогда вероятность хака будет примерно 1:очень много.
P.S. А можно написать хитрый алгортим, изменяющий значение в карте, например, инкрементирующий ячейку с количеством открываний. У вас карту сдампили - если вы после этого открыли дверь раньше злоумышленника, то у вас в карте уже значение +1, а у хацкера старое значение и контроллер его не пустит. А надо оно вообще?
Как раз таки время скверное настало и хаты соседей выносят среди бела дня этажи их мало волнуют . Заходят через двери. По поводу карточек думаю можно сильно не заморачиватся . врятли кто будет пробовать подбирать код или взламывать и . т.д. вопрос больше стоит так. Насколько надежны считыватели карт. Не горят ли не умирают ли без причины.
Бояться ли метки магнита. У меня например кошелёк с магнитом.
ну, и? зачем тебе умный тамбур? ставь квартиру на сигнализацию. всё.
Это не тамбур . это двойная дверь .от двери до двери 30см.
https://www.google.com.ua/search?q=двойная+дверь+квартира&client=ms-android-explay&prmd=ivn&source=lnms&tbm=isch&sa=X&ved=0ahUKEwjE0Nz3nuPSAhVDkiwKHTLDBYoQ_AUIBygB&biw=406&bih=697#imgrc=fiNnMQemF8EIdM:
Типо такого.
https://www.youtube.com/watch?v=YnKK7Hd_UbI
ок. это двойная дверь - дальше что?
ок. это двойная дверь - дальше что?
Согласен с вами. А дальше заходи кто хочет и бери что видишь. Народ с помощью отмычек заходит как бы не быстрее хозяина с родными ключами.