Управление Arduino по звонку с телефона

Аватара
Автор темы
Дим M
Администратор
Администратор
Сообщения: 1020
Зарегистрирован: 5 апреля 2013
Репутация: 66
С нами: 4 года 5 месяцев

Управление Arduino по звонку с телефона

Сообщение #1 Дим » 29 июля 2017, 19:43

В этой теме рассмотрим как можно управлять Arduino простым звонком телефона. Это будет не отправка СМС а простой вызов на модуль NEOWAY M590E. Он сам сбросит вызов и подаст сигнал контроллеру на определённые действия. В данном случае это будет включение и выключение светодиода. Собираем нижеприведенную схему
Управление Arduino по звонку с телефона.jpg
Управление Arduino по звонку с телефона
Управление Arduino по звонку с телефона.jpg (124.49 КБ) 270 просмотров

и заливаем такой скетч. Он довольно таки простой - проверка на номер телефона - если не ваш, то ни каких действий не будет.

Код: Выделить всё

#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); 
int led1=0;//вкл или выкл светодиод
byte led = 13;

void setup() 
{
  pinMode(12,OUTPUT);//пин светодиода
  delay(2000);  
  pinMode(led, OUTPUT);
  digitalWrite(led, LOW);
  Serial.begin(9600);  
  mySerial.begin(9600);
  Serial.println("GSM NEOWAY");
  Serial.println();
  Serial.println("Turn on AOH:");
  mySerial.println("AT+CLIP=1");  // включить АОН
  delay(100);
  Serial.println("Text format sms:");
  mySerial.println("AT+CMGF=1"); // текстовый формат SMS
  delay(100);
  Serial.println("Mode GSM:");
  mySerial.println("AT+CSCS=\"GSM\"");  // кодировка текста - GSM
  delay(100);
  // ПРИ СТАРТЕ, НА КАЖДУЮ КОМАНДУ ДОЛЖНО БЫТЬ ПОДТВЕРЖДЕНИЕ - ОК
}

void loop() 
{
 if(mySerial.available()) //если модуль что-то послал
  {  
    char ch = ' ';
    String val = "";
    
    while(mySerial.available()) 
     {  
       ch = mySerial.read();
       val += char(ch); //собираем принятые символы в строку
       delay(5);
     }

    Serial.print("Neo send> ");
    Serial.println(val);
    
    if(val.indexOf("RING") > -1) //если есть входящий вызов, то проверяем номер
     { 
      if(val.indexOf("79111111111") > -1) // ВПИШИТЕ НОМЕР, с которого Вы будете звонить на модуль
       {  
         Serial.println("Call my phone");
         mySerial.println("ATH");  //разрываем связь
         Serial.println("Disconnection");
         delay(3000);
         if (led1==0){
          digitalWrite( 12, HIGH );led1=1; //ВКЛ светодиод
          Serial.println("ВКЛ светодиод");
        }
        else if (led1==1){
          digitalWrite( 12, LOW );led1=0;//ВЫКЛ светодиод
          Serial.println("ВЫКЛ светодиод");
        }  

       }
     } 
  }
}

phpBB [media]

Для управления с трёх разных телефонных номеров заливаем скетч

Код: Выделить всё

#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11);
int led1=0;//вкл или выкл светодиод
int led2=0;//вкл или выкл светодиод
int led3=0;//вкл или выкл светодиод
byte led = 13;

void setup()
{
  pinMode(8,OUTPUT);//пин светодиода
  pinMode(9,OUTPUT);//пин светодиода
  pinMode(12,OUTPUT);//пин светодиода
  delay(2000); 
  pinMode(led, OUTPUT);
  digitalWrite(led, LOW);
  Serial.begin(9600); 
  mySerial.begin(9600);
  Serial.println("GSM NEOWAY");
  Serial.println();
  Serial.println("Turn on AOH:");
  mySerial.println("AT+CLIP=1");  // включить АОН
  delay(100);
  Serial.println("Text format sms:");
  mySerial.println("AT+CMGF=1"); // текстовый формат SMS
  delay(100);
  Serial.println("Mode GSM:");
  mySerial.println("AT+CSCS=\"GSM\"");  // кодировка текста - GSM
  delay(100);
  // ПРИ СТАРТЕ, НА КАЖДУЮ КОМАНДУ ДОЛЖНО БЫТЬ ПОДТВЕРЖДЕНИЕ - ОК
}

void loop()
{
 if(mySerial.available()) //если модуль что-то послал
  { 
    char ch = ' ';
    String val = "";
   
    while(mySerial.available())
     { 
       ch = mySerial.read();
       val += char(ch); //собираем принятые символы в строку
       delay(5);
     }

    Serial.print("Neo send> ");
    Serial.println(val);
   
    if(val.indexOf("RING") > -1) //если есть входящий вызов, то проверяем номер
     {
      if(val.indexOf("79111111111") > -1) // ВПИШИТЕ первый НОМЕР, с которого Вы будете звонить на модуль
       { 
         Serial.println("Call my phone 1");
         mySerial.println("ATH");  //разрываем связь
         Serial.println("Disconnection");
         delay(3000);
         if (led1==0){
          digitalWrite( 12, HIGH );led1=1; //ВКЛ R светодиод
          Serial.println("ВКЛ светодиод");
        }
        else if (led1==1){
          digitalWrite( 12, LOW );led1=0;//ВЫКЛ R светодиод
          Serial.println("ВЫКЛ светодиод");
        } 
       }

      if(val.indexOf("79111111112") > -1) // ВПИШИТЕ второй НОМЕР, с которого Вы будете звонить на модуль
       { 
         Serial.println("Call my phone 2");
         mySerial.println("ATH");  //разрываем связь
         Serial.println("Disconnection");
         delay(3000);
         if (led2==0){
          digitalWrite( 9, HIGH );led2=1; //ВКЛ G светодиод
          Serial.println("ВКЛ светодиод");
        }
        else if (led2==1){
          digitalWrite( 9, LOW );led2=0;//ВЫКЛ G светодиод
          Serial.println("ВЫКЛ светодиод");
        } 
       }


      if(val.indexOf("79111111113") > -1) // ВПИШИТЕ третий НОМЕР, с которого Вы будете звонить на модуль
       { 
         Serial.println("Call my phone 3");
         mySerial.println("ATH");  //разрываем связь
         Serial.println("Disconnection");
         delay(3000);
         if (led3==0){
          digitalWrite( 8, HIGH );led3=1; //ВКЛ B светодиод
          Serial.println("ВКЛ светодиод");
        }
        else if (led3==1){
          digitalWrite( 8, LOW );led3=0;//ВЫКЛ B светодиод
          Serial.println("ВЫКЛ светодиод");
        } 
       }

       
     }
  }
}


К 8 и 9 пину подключаем ещё 2 светодиода или один RGB, тогда это будут ножки G и B цветов. И тестируем результат.
phpBB [media]
i love you mxIni Mysql
Изображение

! ! !


Аватара
Автор темы
Дим M
Администратор
Администратор
Сообщения: 1020
Зарегистрирован: 5 апреля 2013
Репутация: 66
С нами: 4 года 5 месяцев

Сообщение #2 Дим » 12 августа 2017, 13:41

В какой то момент перестали проходить команды в порт. Решил эту проблему добавлением в void loop() кода:

Код: Выделить всё

 if (Serial.available()) { //если в мониторе порта что-то ввели

    mySerial.write(Serial.read());
  }


Полный код void loop()

Код: Выделить всё

void loop()
{
  if (mySerial.available()) //если модуль что-то послал
  {
    char ch = ' ';
    String val = "";

    while (mySerial.available())
    {
      ch = mySerial.read();
      val += char(ch); //собираем принятые символы в строку
      delay(5);
    }

    Serial.print("Neo send> ");
    Serial.println(val);

    if (val.indexOf("RING") > -1) //если есть входящий вызов, то проверяем номер
    {
      if (val.indexOf("79111111111") > -1) // ВПИШИТЕ НОМЕР, с которого Вы будете звонить на модуль
      {
        Serial.println("Call my phone");
        mySerial.println("ATH");  //разрываем связь
        Serial.println("Disconnection");
        delay(3000);
        if (led1 == 0) {
          digitalWrite( 12, HIGH ); led1 = 1; //ВКЛ светодиод
          Serial.println("ВКЛ светодиод");
        }
        else if (led1 == 1) {
          digitalWrite( 12, LOW ); led1 = 0; //ВЫКЛ светодиод
          Serial.println("ВЫКЛ светодиод");
        }

      }
    }
  }
 if (Serial.available()) {//если в мониторе порта что-то ввели
    mySerial.write(Serial.read());
  }
}
i love you mxIni Mysql
Изображение


  • Похожие темы
    Статистика
    Последнее сообщение

Вернуться в «Программирование»

Кто сейчас на форуме

Сейчас этот раздел просматривают: 1 гость