Здравствуйте форумчане, который день бьюсь с 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);
}
}
Как быть - не знаю, помогите пожалуйста.