При размыкании кнопки единожды выполнить функцию.

Hubert_J_Farnsworth
Offline
Зарегистрирован: 13.11.2017

Всем доброго дня! Делаю GSM сигнализацию, нужно, чтобы она проверяла состояние двери и, если дверь открывается, то единоразово запускалась бы функция по отправке СМС. Реализовал, даже получилось, но терзают смутные сомнения. Пожалуйста, посмотрите кусок скетча с комментариями и скажите правильно ли я понял принцип ыполнения и насколько криво все реализовано? Если криво, подскажите, как будет правильнее! Спасибо!

const int PINKNOPKI = 4; // задаем константу номер входа, подключенный к геркону
byte STATUSGERKONA = 0; // переменная для хранения состояния геркона
byte flag = false; // флаг состояния

void setup() {
  Serial.begin(9600); // инициализируем соединение для контроля работы программы в мониторе порта
}

void loop() {
  STATUSGERKONA = digitalRead(PINKNOPKI); // считываем значения с входа геркона

  // проверяем замкнут или разомкнут геркон

  if (STATUSGERKONA == HIGH && flag == false) { // если дверь открыта, геркон замкнут и флаг = false
    Serial.println("ГЕРКОН HIGH (ДВЕРЬ ЗАКРЫТА) - ДЕЖУРНЫЙ РЕЖИМ)");

    // если дверь открыта, то переходим к выполнению отдельной функции

    flag = true; // устанавливаем значение переменной flag = true
    Serial.println("УСТАНАВЛИВАЕМ ЗНАЧЕНИЕ flag = true");
  }

  if (STATUSGERKONA == LOW && flag == true) // если дверь закрыта, геркон разомкнут и флаг = false
  {
    Serial.println("ГЕРКОН LOW");
    flag = false; // устанавливаем значение переменной flag = true
    Serial.println("И УСТАНАВЛИВАЕМ ЗНАЧЕНИЕ flag = false");
  }
}

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Если работает, то потянет.

А если не работает, то в чем?

Hubert_J_Farnsworth
Offline
Зарегистрирован: 13.11.2017

sadman41 пишет:

Если работает, то потянет.

А если не работает, то в чем?

 

Все работает. Вопрос в том правильно ли я понимаю принцип работы программы, правильного ли типа объявлены переменные и есть ли смысл что-то изменять, чтобы упростить код?

b707
Offline
Зарегистрирован: 26.05.2017

что я в коде не вижу отправки СМС, о которой вы говорите

sadman41
Offline
Зарегистрирован: 19.10.2016

По данному фрагменту невозможно судить ни о принципе, ни об упрощении. 

Ну перекидываются значения переменной - и что дальше? Если вы пишете, что работает, значит правильно перекидываются. Объявления переменных потянут. Хотя и для пина можно взять тип byte.

 

Hubert_J_Farnsworth
Offline
Зарегистрирован: 13.11.2017

b707 пишет:
что я в коде не вижу отправки СМС, о которой вы говорите

Он вынесен в отдельную функцию, по ней у меня вопросов пока что нет.

 

sadman41 пишет:
... Объявления переменных потянут. Хотя и для пина можно взять тип byte.

Спасибо за совет. подправим!

Ответьте, пожалуйста, на последний вопрос: в комментариях я описал как работает этот кусок кода. Правильно ли я понимаю алгоритм работы? Если правильно, продолжим обучение дальше.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

sadman41 пишет:

По данному фрагменту невозможно судить ни о принципе, ни об упрощении. 

Зато можно судить о полном отсутствии присутствия обработки дребезга геркона.

ТС, геркон ртутный? Если нет, то надо помнить о дребезге.