Jump to content

geniv82

Members
  • Content Count

    2
  • Joined

  • Last visited

Community Reputation

0 Обычный

About geniv82

  • Rank
    Новенький

Информация

  • Город
    Воронеж

Электроника

  • Стаж в электронике
    3-5 лет

Recent Profile Visitors

118 profile views
  1. Хотел получить то, что при звонке определяется номер телефона, и, если он совпадает с одним из номеров TEL1 или TEL2 или TEL3: #define TEL1 "79038599995" //// 1 НАШ НОМЕР УПРАВЛЕНИЯ #define TEL2 "79201234567" //// 2 НАШ НОМЕР УПРАВЛЕНИЯ #define TEL3 "79021234567" //// 3 НАШ НОМЕР УПРАВЛЕНИЯ то далее программа включает или выключает реле (в зависимости от первоначального состояния). В первом скетче это условие выполняется, но если там прописан только один телефон. А с двумя и более номерами - не работает. Конечный результат следующий: на данный момент имеется розетка, которая управляется DTMF. Но не удобно включать, т.е. набрать номер, дождаться ответа, нажать соотв. цифру на клавиатуре, сбросить номер. Хочется, чтобы по звонку с двух, трёх номеров срабатывала розетка.
  2. Здравствуйте форумчане, который день бьюсь с GSM розеткой. Проблема в том, что не могу записать более одного разрешённого номера. Вот рабочий скетч. #include <SoftwareSerial.h> SoftwareSerial mySerial(10, 11); // RX, TX unsigned long timing; // Переменная для хранения точки отсчета ////////////--------------////////////// #define TEL1 "79038599995" //// 1 НАШ НОМЕР УПРАВЛЕНИЯ #define TEL2 "79201234567" //// 2 НАШ НОМЕР УПРАВЛЕНИЯ #define TEL3 "79021234567" //// 3 НАШ НОМЕР УПРАВЛЕНИЯ ////////////--------------////////////// void setup() { Serial.begin(9600); mySerial.begin(9600); pinMode(2, OUTPUT); // ЭТО РЕЛЕ digitalWrite(2, LOW); // ПОДТЯЖКА ПОРТА HIGH mySerial.println("ATE0"); //ОТКЛ ЭХО delay(300); mySerial.println("AT+IPR=9600;"); delay(300); } void loop() { 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); mySerial.println("AT+CLIP=1"); // ВКЛ ОПРЕДЕЛИТЕЛЬ НОМЕРА delay(300); while (1) // в цикле { if (mySerial.find(TEL1)) { // ищим номер телефона, если нашли { digitalWrite(2, !digitalRead(2)); // инвертируем A1 delay(500); Serial.println("INVERSIA RELE"); //////////////////////////////////////// delay(500); if ( digitalRead(2) == HIGH) //ЕСЛИ РЕЛЕ ВКЛ LOW { mySerial.println("AT+CHUP;"); // сбрасываем вызов delay(400); Serial.println("VKL RELE"); } else { Serial.println("OTKL RELE"); delay(6000); mySerial.println("AT+CHUP;"); // сбрасываем вызов delay(500); } if (mySerial.find("CLIP:")) break; } } else { // иначе mySerial.println("AT"); // спрашиваем состояние модема delay(200); if (mySerial.find("OK")) break; // и если он в "готовности", выходим из цикла } // если звонок в процессе, возвращает +CPAS: 3 } // и крутимся дальше mySerial.println("AT+CHUP;"); // сбрасываем вызов delay(200); } } А вот этот работать не хочет, из-за изменений в строке: if (mySerial.find(TEL1)||(TEL2)||(TEL3)) { // ищим номер телефона, если нашли #include <SoftwareSerial.h> SoftwareSerial mySerial(10, 11); // RX, TX unsigned long timing; // Переменная для хранения точки отсчета ////////////--------------////////////// #define TEL1 "79038599995" //// 1 НАШ НОМЕР УПРАВЛЕНИЯ #define TEL2 "79201234567" //// 2 НАШ НОМЕР УПРАВЛЕНИЯ #define TEL3 "79021234567" //// 3 НАШ НОМЕР УПРАВЛЕНИЯ ////////////--------------////////////// void setup() { Serial.begin(9600); mySerial.begin(9600); pinMode(2, OUTPUT); // ЭТО РЕЛЕ digitalWrite(2, LOW); // ПОДТЯЖКА ПОРТА HIGH mySerial.println("ATE0"); //ОТКЛ ЭХО delay(300); mySerial.println("AT+IPR=9600;"); delay(300); } void loop() { 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); mySerial.println("AT+CLIP=1"); // ВКЛ ОПРЕДЕЛИТЕЛЬ НОМЕРА delay(300); while (1) // в цикле { if (mySerial.find(TEL1)||(TEL2)||(TEL3)) { // ищим номер телефона, если нашли { digitalWrite(2, !digitalRead(2)); // инвертируем A1 delay(500); Serial.println("INVERSIA RELE"); //////////////////////////////////////// delay(500); if ( digitalRead(2) == HIGH) //ЕСЛИ РЕЛЕ ВКЛ LOW { mySerial.println("AT+CHUP;"); // сбрасываем вызов delay(400); Serial.println("VKL RELE"); } else { Serial.println("OTKL RELE"); delay(6000); mySerial.println("AT+CHUP;"); // сбрасываем вызов delay(500); } if (mySerial.find("CLIP:")) break; } } else { // иначе mySerial.println("AT"); // спрашиваем состояние модема delay(200); if (mySerial.find("OK")) break; // и если он в "готовности", выходим из цикла } // если звонок в процессе, возвращает +CPAS: 3 } // и крутимся дальше mySerial.println("AT+CHUP;"); // сбрасываем вызов delay(200); } } Как быть - не знаю, помогите пожалуйста.
×
×
  • Create New...