Товарищи Помогите Пожалуйста Со Скетчем Для Сигнализации

Тема в разделе "Arduino & Shields", создана пользователем usilad1986, 9 дек 2015.

  1. usilad1986

    usilad1986 Нуб

    Уважаемые профессионалы, прошу Вашей помощи!
    Дело в том, что я решил сделать сигналку в гараже ( ибо имел случай воровства). Заказал в интернет магазине ардуино уно, понижающий трансформатор, коробочку под ардуино., купил уже герконы, сирену и кнопку. В общем все комплектующие по схеме. Дело в том, что по специальности я инженер-механик, и как бы поле моей деятельности лежит немного в другой плоскости. Но я имею прямые руки. Схемы читать умею (в том числе и электро). Проблема в программировании. Полностью отсутствуют азы программирования.
    Так вот к главному. Нашел сайт со схемой подключения и скетчем. Но при компиляции программа среды выдает ошибку.
    Приведу адрес страницы со схемой и скетчем http://eschemo.ru/oh...ema-na-arduino/
    Прошу администраторов не считать это рекламой сторонних ресурсов. А уважаемых профессионалов прошу помочь мне со скетчем. (скетч последний на странице).
    Заранее благодарен.
     
  2. ИгорьК

    ИгорьК Гуру

    Вот он, этот код компилируется. Но что и как он делает - я не вникал.
    Код (C++):
    // постоянные
    const int button = 12;
    // пин для кнопки
    const int gerkon = 3;
    // пин для геркона
    const int sirena = 2;
    // пин упр-ния сиреной
    const int led = 13;
    // пин индикатора
    // переменные
    int buttonState = 0;
    // состояние кнопки
    int gerkonState = 0; // состояние геркона
    int N = 0; // счетчик кнопки отключения охраны
    void setup() { // управление сиреной и индикатором — выход
      pinMode(sirena, OUTPUT);
      pinMode(led, OUTPUT); // кнопка и геркон — входы
      pinMode(gerkon, INPUT);
      pinMode(button, INPUT);
    }

    void loop() {
      digitalWrite(led, HIGH);
      while (buttonState == 0) { // цикл ожидания, пока не нажмем кнопку
        buttonState = digitalRead(button); // для перехода в режим охраны
      } digitalWrite(led, LOW);
      buttonState = 0; // обнуляем значение кнопки
      while (gerkonState == 0) { // цикл, пока не закроем дверь
        gerkonState = digitalRead(gerkon);
      } delay (500); // :-)
      digitalWrite(sirena, HIGH); // Код
      delay (100); // индикации
      digitalWrite(sirena, LOW); // включения
      delay (70); // режима
      digitalWrite(sirena, HIGH); // охраны
      delay (100); // оповещение
      digitalWrite(sirena, LOW); // звуковое
      while (gerkonState == 1) { // ждем открытия двери
        gerkonState = digitalRead(gerkon);
      }
      for (int i = 0; i <= 5; i++) { // 7,5 секунды на нажатие
        buttonState = digitalRead(button); // секретной кнопки
        if (buttonState == HIGH) { // отслеживаем свой — чужой
          N = N + 1;
        }
        delay(1500); // секретная фича :-)))
      }
      if (N > 0) { // самое главное
        digitalWrite(sirena, LOW); // не включаем сирену
      }
      else {
        digitalWrite(sirena, HIGH); // или включаем сирену
      } digitalWrite(led, HIGH); // включаем индикатор
      N = 0;
      buttonState = 0;
      delay(15000); // напоминание «чайникам», которым нравится
      digitalWrite(led, LOW); // давить на кнопки без перерыва
      delay (1000);
    }

     
     
  3. usilad1986

    usilad1986 Нуб

    Уважаемый ИгорьК, попробуйте пожалуйста последний код на странице указанной мной. Я знаю что этот код компилируется, нижний же отказывается
     
  4. ИгорьК

    ИгорьК Гуру

    Исправил:
    Код (C++):
    // постоянные
    const int button = 12; // пин для кнопки
    const int gerkon = 3; // пин для геркона
    const int sirena = 2; // пин упр-ния сиреной const
    int led = 13; // пин индикатора
    // переменные
    int buttonState = 0; // состояние кнопки
    int gerkonState = 0; // состояние геркона
    int N = 0; // счетчик кнопки отключения охраны
    int s = 0; // счетчик сирены
    int value = LOW; // состояние светодиода
    long previousMillis = 0; // переменная подсчета времени без delay
    int doorDelay = 0; // переменная задержки автовключения охраны
    // изменяемые переменные
    int timeDelay = 50; // время задержки (t/10=секунды) на снятие с охраны
    int autoSec = 15; // время (сек) автоматической постановки на охрану после закрывания двери
    void setup() { // управление сиреной и индикатором — выход
      pinMode(sirena, OUTPUT);
      pinMode(led, OUTPUT); // кнопка и геркон — входы
      pinMode(gerkon, INPUT);
      pinMode(button, INPUT);
    }
    void loop() {
      digitalWrite(led, HIGH);
      while (buttonState == 0) { // цикл ожидания, пока не нажмем кнопку
        buttonState = digitalRead(button); // для перехода в режим охраны
        if (s == 1) {
          if (millis() - previousMillis > 500) { // прерывистая работа сирены
            previousMillis = millis();
            digitalWrite(sirena, LOW);
            delay(200);
            digitalWrite(sirena, HIGH);
          }
          if (digitalRead(gerkon) == 1) { // автоматическая постановка на охрану после закрывания двери
            if (millis() - previousMillis > 1000) {
              previousMillis = millis();
              doorDelay++;
            }
            if (doorDelay == autoSec) {
              buttonState = 1;
            }
          }
          else {
            doorDelay = 0;
          }
        } digitalWrite(led, LOW);
        buttonState = 0; // обнуляем значение кнопки
        s = 0;
        previousMillis = 0; //
        digitalWrite(sirena, LOW); // отключение сирены кнопкой
        while (gerkonState == 0) { // цикл, пока не закроем дверь
          gerkonState = digitalRead(gerkon);
        }
        delay (500); // :-)
        digitalWrite(sirena, HIGH); // Код
        delay (70); // индикации
        digitalWrite(sirena, LOW); // включения
        delay (70); // режима
        digitalWrite(sirena, HIGH); // охраны
        delay (70); // оповещение
        digitalWrite(sirena, LOW); // звуковое
        while (gerkonState == 1) { // ждем открытия двери
          gerkonState = digitalRead(gerkon);
        }
        if (N > 0) { // самое главное
          digitalWrite(sirena, LOW); // не включаем сирену
        }
        else {
          s = 1;
          digitalWrite(sirena, HIGH); // включаем сирену
          delay(10000); // непрерывно на 10 секунд
        }
        digitalWrite(led, HIGH); // включаем индикатор
        N = 0;
        buttonState = 0;
        N = 0;
        doorDelay = 0;
        delay(2000); // напоминание «чайникам», которым нравится давить на кнопки без перерыва
        delay (1000);
        digitalWrite(led, LOW);
      }
    }
    Ошибка там была вот здесь:
    Код (C++):
    for (int i=0; i 0) { // самое главное digitalWrite(sirena, LOW); // не включаем сирену }

    Источник: http://eschemo.ru/ohrannaya-sistema-na-arduino/ © Eschemo.ru
     
  5. usilad1986

    usilad1986 Нуб

    Спасибо Вам огромное!!!!!!!
     
  6. ИгорьК

    ИгорьК Гуру

    (Как он работает - не вникал!)
     
  7. usilad1986

    usilad1986 Нуб

    ИгорьК, как Вы думаете возможно ли как то усовершеннствовать данную программу сигнализации. Принцип ее действия описан тут : http://eschemo.ru/ohrannaya-sistema-na-arduino/
     
  8. Tomasina

    Tomasina Сушитель лампочек Модератор

    Код (C++):
    const int button = 12; // пин для кнопки
    const int gerkon = 3; // пин для геркона
    const int sirena = 2; // пин упр-ния сиреной const
    int led = 13; // пин индикатора
    // переменные
    int buttonState = 0; // состояние кнопки
    int gerkonState = 0; // состояние геркона
    [​IMG]
     
  9. ИгорьК

    ИгорьК Гуру

    Конечно можно. Вон, тов. Tomasina офигивает от нее совершенно справедливо.
     
  10. usilad1986

    usilad1986 Нуб

    1.Мучает меня вопрос, что если злоумышленник открыл дверь, сирена сработала. Если он быстро закроет дверь - сирена замолчит или нет?
    2.
    - где находится эта настраиваемая величина в скетче? подскажите пожалуйста. это
    for (int i=0; i <= 5; i++){ // 7,5 секунды на нажатие ????



    Источник: http://eschemo.ru/ohrannaya-sistema-na-arduino/ © Eschemo.ru
     
  11. ИгорьК

    ИгорьК Гуру

    Ну да. Там в течение 7,5 секунд делается странная попытка проверить нажатие кнопки.
     
  12. usilad1986

    usilad1986 Нуб

    ИгорьК, скажите возможно ли в этот скетч добавить еще миганием светодиодом?
    что то вроде этого
    int led = 8;
    void setup()
    {
    pinMode(led, OUTPUT);
    }
    void loop()
    {
    digitalWrite(led, HIGH);
    delay(1000);
    digitalWrite(led, LOW);
    delay(1000);
    }
     
  13. ИгорьК

    ИгорьК Гуру

    что-то вроде этого - можно.
    Но давайте отделим вещи друг от друга:
    если Вы самодельщик и решили повторить этот проект - я Вам код исправил.
    если Вам интересно программирование МК - велкам сюда: http://wiki.amperka.ru/ Все вопросы со временем уйдут.
    если Вам нужно что-то персональное и Вы не можете это сделать, Вам сюда: http://forum.amperka.ru/forums/Закажу-проект.22/
     
  14. Airbus

    Airbus Радиохулиган Модератор

    Нафига?Уж лучше СМС отправлять А "ревун" можно сделать и на транзисторах или на 555
     
  15. usilad1986

    usilad1986 Нуб

    Код (C++):
    // постоянные
    const int button = 12; // пин для кнопки
    const int gerkon = 3; // пин для геркона
    const int sirena = 2; // пин упр-ния сиреной const
    int led = 8; // пин индикатора
    // переменные
    int buttonState = 0; // состояние кнопки
    int gerkonState = 0; // состояние геркона
    int N = 0; // счетчик кнопки отключения охраны
    int s = 0; // счетчик сирены
    int value = LOW; // состояние светодиода
    long previousMillis = 0; // переменная подсчета времени без delay
    int doorDelay = 0; // переменная задержки автовключения охраны
    // изменяемые переменные
    int timeDelay = 50; // время задержки (t/10=секунды) на снятие с охраны
    int autoSec = 15; // время (сек) автоматической постановки на охрану после закрывания двери
    void setup() { // управление сиреной и индикатором — выход
      pinMode(sirena, OUTPUT);
      pinMode(led, OUTPUT); // кнопка и геркон — входы
      pinMode(gerkon, INPUT);
      pinMode(button, INPUT);
    }
    void loop() {
      digitalWrite(led, HIGH);   // Включаем светодиод
      delay(1000);               // ждем 1000 мс
      digitalWrite(led, LOW);    // Выключаем светодиод
      delay(1000);               //ждем 1000 мс
      digitalWrite(led, HIGH);
      while (buttonState == 0) { // цикл ожидания, пока не нажмем кнопку
        buttonState = digitalRead(button); // для перехода в режим охраны
        if (s == 1) {
          if (millis() - previousMillis > 500) { // прерывистая работа сирены
            previousMillis = millis();
            digitalWrite(sirena, LOW);
            delay(200);
            digitalWrite(sirena, HIGH);
          }
          if (digitalRead(gerkon) == 1) { // автоматическая постановка на охрану после закрывания двери
            if (millis() - previousMillis > 1000) {
              previousMillis = millis();
              doorDelay++;
            }
            if (doorDelay == autoSec) {
              buttonState = 1;
            }
          }
          else {
            doorDelay = 0;
          }
        } digitalWrite(led, LOW);
        buttonState = 0; // обнуляем значение кнопки
        s = 0;
        previousMillis = 0; //
        digitalWrite(sirena, LOW); // отключение сирены кнопкой
        while (gerkonState == 0) { // цикл, пока не закроем дверь
          gerkonState = digitalRead(gerkon);
        }
        delay (500); // :-)
        digitalWrite(sirena, HIGH); // Код
        delay (70); // индикации
        digitalWrite(sirena, LOW); // включения
        delay (70); // режима
        digitalWrite(sirena, HIGH); // охраны
        delay (70); // оповещение
        digitalWrite(sirena, LOW); // звуковое
        while (gerkonState == 1) { // ждем открытия двери
          gerkonState = digitalRead(gerkon);
        }
        if (N > 0) { // самое главное
          digitalWrite(sirena, LOW); // не включаем сирену
        }
        else {
          s = 1;
          digitalWrite(sirena, HIGH); // включаем сирену
          delay(10000); // непрерывно на 10 секунд
        }
        digitalWrite(led, HIGH); // включаем индикатор
        N = 0;
        buttonState = 0;
        N = 0;
        doorDelay = 0;
        delay(2000); // напоминание «чайникам», которым нравится давить на кнопки без перерыва
        delay (1000);
        digitalWrite(led, LOW);
      }
    }
    незнаю так или нет. но вроде компилируется.
     
  16. usilad1986

    usilad1986 Нуб

    1.
    Чтобы было
    2.
    И до этого дойдем
    3.
    таймер NE555 нет желания использовать


    1. спасибо большое
    2. вточку
    3. пропущю:)
     
    Последнее редактирование: 9 дек 2015
  17. ИгорьК

    ИгорьК Гуру

    Лишь бы работал. Практика - критерий истины. :)

    Любой код можно переписывать каждые полгода, если развиваться в направлении программирования.