код работает почти правильно

saftik
Offline
Зарегистрирован: 08.04.2015

всем доброго времени суток. прошу помощи в наладке кода.
пишу скетч сигнализацию для квартиры.
в квартире установленна двойная дверь. назовем их 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); // замыкаем кнопку вызова на телефоне
}



 

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Извини, но я программирую в другом стиле, так что ваш код мне тяжело разбирать.

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

saftik пишет:

на данном этапе отказалсяот класса титановый велосипед. по подсказке Клапауций 112

официально снимаю с себя ответсвенность за всякого рода ложные интерпретации моих постов.

здесь #365 я не советовал отказываться от класс титановый велосипед для тактовой кнопки.

saftik
Offline
Зарегистрирован: 08.04.2015

qwone пишет:

Извини, но я программирую в другом стиле, так что ваш код мне тяжело разбирать.


и на том спасибо )

saftik
Offline
Зарегистрирован: 08.04.2015

товарищ   Клапауций 112 возможно вы что подскажете. ну кроме того что код некудышний ))

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

saftik пишет:

товарищ   Клапауций 112 возможно вы что подскажете. ну кроме того что код некудышний ))

код - не знаю.

алгоритм - никудышний: практически невозможно по модели поведения ползателя дверьми тамбура определить, вор это, твой гость, твои дети ловят собаку или ты сам нажрался и мечешься в белой гарячке, ловя покемонов.

рекомендация: придумай внятный алгоритм идентификации вора.

arDubino
Offline
Зарегистрирован: 12.01.2017

да все норм же.

пару раз с сиреной после 23-00 откроет двери.

потом соседи ему карму почистят вместе с полицией и все будет работать

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

arDubino пишет:

да все норм же.

пару раз с сиреной после 23-00 откроет двери.

потом соседи ему карму почистят вместе с полицией и все будет работать

у него не сирена, а звонок на свою мобилу. и, тема про балкон до конца не раскрыта - вор может беспрепятсвенно проникнуть через балкон, но покидать квартиру должен, почему-то через вумный тамбур. #361

saftik
Offline
Зарегистрирован: 08.04.2015

Балкон 4 этаж. 5эт.дом. вероятности мало но думаю
исключать её не стоит.
Г-н Клапауций хотелось бы узнать ваше авторитетное мнение какой алгоритм выбрали бы вы в моём случае. Турели не предлагать )

saftik
Offline
Зарегистрирован: 08.04.2015

Может не париться и сделать на r fid . тогда появляется вопрос
Насколько они надежны.

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

saftik пишет:
Г-н Клапауций хотелось бы узнать ваше авторитетное мнение какой алгоритм выбрали бы вы в моём случае. Турели не предлагать )

*прошу определиться, кто я для тебя - господин или товарищ.

далее... я не являюсь специалистом и, тем более, авторитетом в алгоритмах охранных систем.

но. что бы сделал я - сходил бы к своему участковому и попросил у него статистику взлома квартир своего района выше 3-го этажа за последние 5-ть лет. опубликовал бы статистику сюда - внезапно может оказаться, что вероятность взлома твоей квартиры ниже попадания метеорита в твой дом.

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

В каком плане надёжны? Карта легко ломается рукой напополам.

Если носить карту в кошельке, обёрнутом фольгой, с гарантией того, что её не сдампят, то можно забить всю карту рандом значениями, тогда вероятность хака будет примерно 1:очень много.

P.S. А можно написать хитрый алгортим, изменяющий значение в карте, например, инкрементирующий ячейку с количеством открываний. У вас карту сдампили - если вы после этого открыли дверь раньше злоумышленника, то у вас в карте уже значение +1, а у хацкера старое значение и контроллер его не пустит. А надо оно вообще?

saftik
Offline
Зарегистрирован: 08.04.2015

Как раз таки время скверное настало и хаты соседей выносят среди бела дня этажи их мало волнуют . Заходят через двери. По поводу карточек думаю можно сильно не заморачиватся . врятли кто будет пробовать подбирать код или взламывать и . т.д. вопрос больше стоит так. Насколько надежны считыватели карт. Не горят ли не умирают ли без причины.
Бояться ли метки магнита. У меня например кошелёк с магнитом.

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

saftik пишет:
Как раз таки время скверное настало и хаты соседей выносят среди бела дня этажи их мало волнуют . Заходят через двери.

ну, и? зачем тебе умный тамбур? ставь квартиру на сигнализацию. всё.

saftik
Offline
Зарегистрирован: 08.04.2015

Это не тамбур . это двойная дверь .от двери до двери 30см.

saftik
Offline
Зарегистрирован: 08.04.2015
qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016
Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

saftik пишет:
Это не тамбур . это двойная дверь .от двери до двери 30см.

ок. это двойная дверь - дальше что?

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Клапауций 112 пишет:

ок. это двойная дверь - дальше что?

Согласен с вами. А дальше заходи кто хочет и бери что видишь. Народ с помощью отмычек заходит как бы не быстрее хозяина с родными ключами.