код работает почти правильно
- Войдите на сайт для отправки комментариев
всем доброго времени суток. прошу помощи в наладке кода.
пишу скетч сигнализацию для квартиры.
в квартире установленна двойная дверь. назовем их 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
ок. это двойная дверь - дальше что?
ок. это двойная дверь - дальше что?
Согласен с вами. А дальше заходи кто хочет и бери что видишь. Народ с помощью отмычек заходит как бы не быстрее хозяина с родными ключами.