Как распознать два и более разрешённых номеров

Тема в разделе "Arduino & Shields", создана пользователем geniv82, 21 фев 2019.

  1. Airbus

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

    Можно даже проще.Звонят определяем номер (АОН уже включен) заполняем строку с номером.Если пришел конец строки кладем трубу (в люблм случае?).Проверяем что пришло.Если ОНО переключаем реле.
     
    Andrey12 нравится это.
  2. Airbus

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

    Можно.Немного опередил меня.
     
    Andrey12 нравится это.
  3. parovoZZ

    parovoZZ Гуру

    фигурных скобок можно на открывать столько, сколько влезет. Важно их все закрыть там, где следует. Стандарт MISRA настоятельно требует if ... else оформлять фигурными скобками даже одиночные операторы.
     
    Andrey12 и Airbus нравится это.
  4. Airbus

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

    Когда то я вообще делал так:Номера писал на СИМ под именем Админ (Админ1 ,Админ2 итд)Мониторил порт по USART в прерываниях.Если приходил звонок смотрел кто звонит если Админ то бросал трубу и что то делал если нет то просто бросал трубу.Тогда правда был Семен С35 и Тини 2313 и код на Си.Но думаю и тут так сделать можно.И даже удобнее работать с номерами на СИМ чем каждый раз менять в коде.
     
    Andrey12 нравится это.
  5. geniv82

    geniv82 Нерд

    Нее, не работает.
     
  6. geniv82

    geniv82 Нерд

    1. Розетка находится на крыльце, освещение - весь двор, от крыльца до калитки = 40 метров. Если я дома, встречаю или провожаю кого-либо, то включаю освещение с кнопки. Если я приехал и привёз домой продукты, то, подъезжая, набрал номер и включил свет, зашёл в дом, свет выключил.
    2. Работает, спасибо.
    3. delay(400); в строке где идёт включение реле сразу сбрасывает звонок, а delay(6000); в строке где идёт выключение реле идёт задержка на сброс. Таким образом я знаю: один гудок - реле включилось, два гудка и сброс - реле выключилось.
     
  7. Andrey12

    Andrey12 Гик

    geniv82 С подробным описанием ситуации все становится понятно.
    С делаями 400 и 6000 понятно теперь, интересно придумано. Ну тогда в принципе кнопка будет работать нормально, так как в loop вызывается, глюки могут наблюдаться только при входящем звонке когда выполняется delay(6000) а вы тычете кнопку и не получаете результата.
    Но по описанному вами использованию устройства такого варианта не должно быть.
     
  8. geniv82

    geniv82 Нерд

    Огромнейшее спасибо, кнопку вернул, теперь всё как хотел.
     
    Andrey12 нравится это.
  9. geniv82

    geniv82 Нерд

    Здравствуйте, подведу итог. Собрал всё в кучу, хотел сделать плату, но передумал. С Китая пришёл модуль М590Е и с ним получилась засада. Подключил его к дуне, а не работает. До этого подключал SIM800L, SIM900R, всё было нормально. Оказывается М590Е определяет номер без плюса, т. е. 7900ххххххх, а SIM800L, SIM900R определяют с плюсом, т. е. +7900ххххххх. Имейте это ввиду. В скетче номера без +, кнопка принудительного включения на 3 пине и на землю. Спасибо всем участникам. Донор для корпуса такой https://www.avito.ru/voronezh/tovar...nex_hd200_plc_adaptery_500_megabit_1349159296.
    Код (C++):
    #include <SoftwareSerial.h>
    SoftwareSerial mySerial(10, 11); // RX, TX
    unsigned long timing; // Переменная для хранения точки отсчета
    boolean buttonWasUp = true;
    ////////////--------------//////////////
    #define  TEL1  "7903ххххххх"    //// 1 НАШ НОМЕР УПРАВЛЕНИЯ
    #define  TEL2  "7905ххххххх"    //// 2 НАШ НОМЕР УПРАВЛЕНИЯ
    #define  TEL3  "7980ххххххх"    //// 3 НАШ НОМЕР УПРАВЛЕНИЯ
    ////////////--------------//////////////
    void setup()
    { Serial.begin(9600);
      mySerial.begin(9600);
      pinMode(2, OUTPUT);                 // ЭТО РЕЛЕ
      digitalWrite(2, LOW);             // Низкий уровень на реле
      mySerial.println("ATE0");          //ОТКЛ ЭХО
      delay(300);
      mySerial.println("AT+CLIP=1");     // ВКЛ ОПРЕДЕЛИТЕЛЬ НОМЕРА
      delay(300);
      mySerial.println("AT+IPR=9600;");
      delay(300);
       pinMode(3, INPUT_PULLUP);
    }
    /////////кнопка////////
    void button()
    {
      boolean buttonIsUp = digitalRead(3);
      if (buttonWasUp && !buttonIsUp){
        delay(10);
        buttonIsUp = digitalRead(3);
        if(!buttonIsUp) {
          digitalWrite(2, !digitalRead(2));
        }
      }
        buttonWasUp = buttonIsUp;
    }
    /////////кнопка////////
    //////////////////////////////////////////////////
    void loop()
    {
      button();
      digitalWrite(13, HIGH);// ИНДИКАЦИЯ СВЯЗИ СИМ800 И МИКРОК.
      mySerial.println("AT"); // РЕГИСТАЦИЯ  СЕТИ
      if (millis() - timing > 500) { // Вместо 10000 подставьте нужное вам значение паузы
        if ( mySerial.find("OK")) // ОТВЕТ  ОК
        { Serial.println("SOEDINENIE OK");
          digitalWrite(13, LOW);
        }//  МИГАЕМ ВСЕ ОК
        else {
          Serial.println("SOEDINENIE NO");
          digitalWrite(13, HIGH); // ЕСЛИ НЕ НАШЛИ ГОРИМ
        }
        timing = millis();
      }

      /////////////ИЩЕМ ЗВОНОК/////////////

      if (mySerial.find("CLIP:")) // если нашли RING
      {
        Serial.println("RING!");
        delay(200);
        // читаем строку
        String lTmpStr = mySerial.readString();
        // ищем номер из списка
        if ((lTmpStr.indexOf(TEL1) !=-1)||(lTmpStr.indexOf(TEL2) !=-1)||(lTmpStr.indexOf(TEL3) !=-1)) {
            // если нашли инвертируем состояние реле
            if ( digitalRead(2)){
                digitalWrite(2, LOW);
                Serial.println("OTKL  RELE");
            }
            else {
                digitalWrite(2, HIGH);
                Serial.println("VKL RELE");        
              }

            mySerial.println("AT+CHUP;"); // сбрасываем вызов
            delay(400);
        }
        else{
            // незнакомый номер
            mySerial.println("AT+CHUP;"); // сбрасываем вызов
            delay(400);
        }
      }
    }
    IMG_20190410_084722.jpg IMG_20190410_084658.jpg IMG_20190410_084838.jpg
     
  10. DetSimen

    DetSimen Guest

    чтоб единабразно работало, надо, приняв номер, проверить его на ведущий плюс, и если его нет, то добавить.
     
    b707 и Andrey12 нравится это.