пока только код (
для GSMGPRS shield SIM900
/// GSM реле, для GSM\GPRS shield SIM900 // донат, https://money.yandex.ru/to/410012486954705 //// как подключен модем? //#include <SoftwareSerial.h> // если программный //SoftwareSerial gsm(7, 8); // RX, TX //#define gsm Serial // если аппаратный в UNO #define gsm Serial1 // если аппаратный в леонардо #define LED 13 #define TELMODE "70001112233" // !! номер с которого принимаем команду #define relay A2 // !! выход на реле #define pinBOOT 9 // нога BOOT или K на модеме M590, на SIM900 это 9 ///////////////////////// void setup() { delay(1000); //// !! чтобы нечего не повисало при включении gsm.begin(9600); /// незабываем указать скорость работы UART модема //Serial.begin(9600); pinMode(LED, OUTPUT); pinMode(pinBOOT, OUTPUT); /// нога BOOT на модеме pinMode(relay, OUTPUT); /// нога для реле delay(1000); digitalWrite(LED, HIGH); // включаем лед ///// включаем модем, gsm.println("AT"); // смотрим есть ли ответ от модема delay(100); if (!gsm.find("OK")){ // если нет, дергаем ногу включения digitalWrite(pinBOOT, HIGH); delay(1000); digitalWrite(pinBOOT, LOW); } // нужно дождатся включения модема и соединения с сетью delay(2000); gsm.println("ATE0"); // выключаем эхо while(1){ // ждем подключение модема к сети gsm.println("AT+COPS?"); if (gsm.find("+COPS: 0")) break; digitalWrite(LED, LOW); // блымаем светодиодом delay(50); digitalWrite(LED, HIGH); delay(500); } //Serial.println("Modem OK"); digitalWrite(LED, LOW); // блымаем светодиодом delay(1500); digitalWrite(LED, HIGH); delay(250); digitalWrite(LED, LOW); } void loop() { if(gsm.find("RING")){ // если нашли RING while(1){ // в цикле if (gsm.find(TELMODE)){ // ищим номер телефона, если нашли digitalWrite(relay, !digitalRead(relay)); // переключаем реле //Serial.print("relay:"); //Serial.println(digitalRead(relay)); break; // и выходим } else{ // иначе gsm.println("AT+CPAS"); // спрашиваем состояние модема delay(50); if (gsm.find("+CPAS: 0")) break; // и если он в "готовности", выходим из цикла // если звонок в процессе, возвращает +CPAS: 3 gsm.println("AT+CLCC"); // даем команду для АОН, нужно для SIM900 // и крутимся дальше } } gsm.println("ATH0"); // сбрасываем вызов digitalWrite(LED, LOW); // сигнализируем об этом delay(500); digitalWrite(LED, HIGH); delay(250); digitalWrite(LED, LOW); } }
для GSMGPRS Neoway M590
/// GSM реле, для M590 // донат, https://money.yandex.ru/to/410012486954705 //// как подключен модем? //#include <SoftwareSerial.h> // если программный //SoftwareSerial gsm(7, 8); // RX, TX //#define gsm Serial // если аппаратный в UNO #define gsm Serial1 // если аппаратный в леонардо #define LED 13 #define TELMODE "70001112233" // !! номер с которого принимаем команду #define relay A2 // !! выход на реле #define pinBOOT 5 // нога BOOT или K на модеме M590 ///////////////////////// void setup() { delay(1000); //// !! чтобы нечего не повисало при включении gsm.begin(9600); /// незабываем указать скорость работы UART модема //Serial.begin(9600); pinMode(LED, OUTPUT); pinMode(pinBOOT, OUTPUT); /// нога BOOT на модеме pinMode(relay, OUTPUT); /// нога для реле delay(1000); digitalWrite(LED, HIGH); // включаем лед ///// включаем модем, gsm.println("AT"); // смотрим есть ли ответ от модема delay(100); if (!gsm.find("OK")){ // если нет, дергаем ногу включения digitalWrite(pinBOOT, LOW); delay(1000); digitalWrite(pinBOOT, HIGH); } // нужно дождатся включения модема и соединения с сетью delay(2000); gsm.println("ATE0"); // выключаем эхо while(1){ // ждем подключение модема к сети gsm.println("AT+COPS?"); if (gsm.find("+COPS: 0")) break; digitalWrite(LED, LOW); // блымаем светодиодом delay(50); digitalWrite(LED, HIGH); delay(500); } Serial.println("Modem OK"); digitalWrite(LED, LOW); // блымаем светодиодом delay(1500); digitalWrite(LED, HIGH); delay(250); digitalWrite(LED, LOW); } void loop() { if(gsm.find("RING")){ // если нашли RING gsm.println("AT+CLIP=1"); // включаем АОН, !для М590 while(1){ // в цикле if (gsm.find(TELMODE)){ // ищим номер телефона, если нашли digitalWrite(relay, !digitalRead(relay)); // переключаем реле Serial.print("relay:"); Serial.println(digitalRead(relay)); break; // и выходим } else{ // иначе gsm.println("AT+CPAS"); // спрашиваем состояние модема delay(50); if (gsm.find("+CPAS: 0")) break; // и если он в "готовности", выходим из цикла // если звонок в процессе, возвращает +CPAS: 3 // и крутимся дальше } } gsm.println("AT+CLIP=0"); // выключаем АОН, !для м590 delay(50); gsm.println("ATH0"); // сбрасываем вызов digitalWrite(LED, LOW); // сигнализируем об этом delay(500); digitalWrite(LED, HIGH); delay(250); digitalWrite(LED, LOW); } }