Отправка СМС на звонк

Pavel_1282
Offline
Зарегистрирован: 19.12.2012

Всем привет. Есть задача отправлять СМС сообщение с показаниями датчика абоненту. Написан код работает он след образом счит показания датчика, если абонент звонит, то скидывается звонок и в ответ GSM модуль отсылает СМС на ФИКСИРОВАННЫЙ номер (кот прописан в коде). Что дописать в программе чтобы не было привязки к ФИКСИРОВАННОМУ номеру, а можно было звонить с ЛЮБОГО номера и в ответ приходила на него же СМС ?

// вывод данных на gsm

#include <TroykaMQ.h>
#include <Thread.h> 
#include <SoftwareSerial.h>

#define analogMQ7  A0 // Пин к которому подключен датчик (A0)
#define PIN_MQ7_HEATER  13 //Пин к которому подключен нагреватель

MQ7 mq7(analogMQ7);

int ch ;
String val = "";
int highLevel = 2;     // значение выше 2 ppm
int val_2;
 SoftwareSerial SIM800(10, 11);          // Выводы SIM800L Tx & Rx подключены к выводам Arduino 3 и 2
////////////////////////////////////////
void setup()
{
   Serial.begin (9600);
   SIM800.begin(9600);               // Скорость обмена данными с модемом
   SIM800.println("AT");
   SIM800.println("AT+CLIP=1");  //включаем АОН
   delay(100);
   SIM800.println("AT+CMGF=1");  //режим кодировки СМС - обычный (для англ.)
   delay(100);
   SIM800.println("AT+CSCS=\"GSM\"");  //режим кодировки текста
   delay(100);            
}
            void loop()
{
  if (!mq7.isCalibrated() && mq7.atHeatCycleEnd()) 
      {
         mq7.calibrate();// выполняем калибровку датчика на чистом воздухе
                }
       if (mq7.isCalibrated() && mq7.atHeatCycleEnd())
      {          
        mq7.cycleHeat(); // запускаем термоцикл
      }                 
        val_2 = mq7.readCarbonMonoxide(); 
            {
             updateSerial();
            }
   } 
           void updateSerial()
                        {                            
    if (SIM800.available()) {  //если GSM модуль что-то послал нам, то
    while (SIM800.available()) {  //сохраняем входную строку в переменную val
      ch = SIM800.read();
      val += char(ch);
      delay(10);
    }
      
            if (val.indexOf("RING") > -1)  {  //если звонок обнаружен, то проверяем номер
            if (val.indexOf("79671890898") > -1)//если номер звонящего наш, то далее разрываем связь
     {           
        SIM800.println("ATH0");  //разрываем связь
        SIM800.println("AT+CMGF=1");                        // Выбирает (переводим) в формат SMS
        updateSerial();
        SIM800.println("AT+CMGS=\"+79671890898\"");         // Отправка СМС на указанный номер
         updateSerial();
        if (val_2 >= highLevel){
                 
         Serial.println("SMS send started");
         delay(500);
         SIM800.print("CO(gas) = ");
         SIM800.print(mq7.readCarbonMonoxide()); // Тест сообщения
         SIM800.println(" ppm");
         SIM800.print("Dander");
         delay(500);
         SIM800.write(26);
         Serial.println("SMS send complete");
         delay(2000);
        }
           else {
         Serial.println("SMS send started");
         delay(500);
         SIM800.print("CO(gas) = ");
         SIM800.print(mq7.readCarbonMonoxide()); // Тест сообщения
         SIM800.println(" ppm");
         SIM800.print("Safely");  //отправляем СМС на номер
         delay(500);
         SIM800.write(26);
         Serial.println("SMS send complete");
         delay(2000);
      }  }}             
            else
     Serial.println(val);  //печатаем в монитор порта пришедшую строку
   val = "";
  }   
  }

 

rkit
Offline
Зарегистрирован: 23.11.2016

А вот и РАБОТАЮЩИЙ

DetSimen
DetSimen аватар
Онлайн
Зарегистрирован: 25.01.2017

55я и 60я строка ни на какие мысли не наводят?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Вот в этой теме работает с любым телефоном и ТС интересовался как сделать, чтобы как у Вас - только с одним. Посмотрите, может получится скрестить его скетч с Вашим.

Pavel_1282
Offline
Зарегистрирован: 19.12.2012

DetSimen пишет:

55я и 60я строка ни на какие мысли не наводят?

Допустим... Просветите, если не затруднит Вас

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Pavel_1282 пишет:

DetSimen пишет:

55я и 60я строка ни на какие мысли не наводят?

Допустим... Просветите, если не затруднит Вас

Это Вы просветите на какие именно мысли они Вас навели, если не затруднит Вас.

MaksVV
Offline
Зарегистрирован: 06.08.2015

В строке 53 распечатайте в терминал принятую строку  от модема ( val ) , будет понятнее что нужно делать . 

Pavel_1282
Offline
Зарегистрирован: 19.12.2012

MaksVV пишет:

В строке 53 распечатайте в терминал принятую строку  от модема ( val ) , будет понятнее что нужно делать . 

вы имеете ввиду, так ?

 Serial.println(val);

 

Pavel_1282
Offline
Зарегистрирован: 19.12.2012

Как я понимаю по алгоритму нужно определить номер, считать его из строки данных, присвоить ему переменную и в отправке смс место номера ставить эту переменнную? Или можно другим способом?

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Pavel_1282 пишет:

Как я понимаю по алгоритму нужно определить номер, считать его из строки данных, присвоить ему переменную и в отправке смс место номера ставить эту переменнную? Или можно другим способом?

Не правильно. Нужно так .

определить номер, считать его из строки данных в переменную и в отправке смс место номера ставить эту переменнную

Причем определять номер не нужно. Он у вас сам определиться.

Komandir
Offline
Зарегистрирован: 18.08.2018

А это реальный номер телефона в скетче ? И бомба еще не прилетела ???

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Откуда? Кто тут обитает, типа меня, этим не интересуются. Ну если только позже Гугл в выдаче покажет. 

Pavel_1282
Offline
Зарегистрирован: 19.12.2012

Считывать номер из строки данных val через оператор - val.indexOf( )? Если так, то как указать корректно в скобках диапазон поиска номера из строки val ?

DetSimen
DetSimen аватар
Онлайн
Зарегистрирован: 25.01.2017

Ищи в строке RING сначала, а потом, если нашёл, ищи дальше "+7".  И пока следующие символы - цифры, то собирай из них телефонный номер.  

Pavel_1282
Offline
Зарегистрирован: 19.12.2012

DetSimen пишет:

Ищи в строке RING сначала, а потом, если нашёл, ищи дальше "+7".  И пока следующие символы - цифры, то собирай из них телефонный номер.  

"+7" Искать отдельно ?

Как искать эти остальные цифры, ведь они же разные? Т.к. задача отправлять на любой номер СМС 

DetSimen
DetSimen аватар
Онлайн
Зарегистрирован: 25.01.2017

зачитай чонить за isdigit(int);

v258
Offline
Зарегистрирован: 25.05.2020

Pavel_1282 пишет:

"+7" Искать отдельно ?

Как искать эти остальные цифры, ведь они же разные? Т.к. задача отправлять на любой номер СМС 

Следующие за +7 десять цифр - это и есть номер

Komandir
Offline
Зарегистрирован: 18.08.2018

Просили же выложит значение val ?!

Мы что экстрасексы ? ХЗ как там шлет модуль номер телефона ...

DetSimen
DetSimen аватар
Онлайн
Зарегистрирован: 25.01.2017

Pavel_1282 пишет:

Как искать эти остальные цифры, ведь они же разные? 

Найду номер телефона в строке с разными арабскими цифрами всево за пицот рублей. 

Komandir
Offline
Зарегистрирован: 18.08.2018

+7 ... а если кто из за бугра позвонит ? Останется без СМС ?

v258
Offline
Зарегистрирован: 25.05.2020

Komandir пишет:

+7 ... а если кто из за бугра позвонит ? Останется без СМС ?

Зато деньги сэкономит - за бугор эсэмэски дорого стоят )))

v258
Offline
Зарегистрирован: 25.05.2020

Кстати, мы вот тут прикалываемся, а никто ж не спросил, откуда ТС? Может он и не из РФ - тогда там вовсе не +7 будет ))

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

v258 пишет:

Кстати, мы вот тут прикалываемся, а никто ж не спросил, откуда ТС? Может он и не из РФ - тогда там вовсе не +7 будет ))

В исходном сообщении темы "+7..."

v258
Offline
Зарегистрирован: 25.05.2020

Сомневаюсь я, что это его код, скорее всего где-то скопирован ))

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

В данном случае это не важно. В примере, выложенном ТС, +7 и обсуждается именно +7. А если ТС это вдруг не подходит, это его проблемы.

Pavel_1282
Offline
Зарегистрирован: 19.12.2012

Смотрю здесь одни прикалисты, а не программисты!

v258
Offline
Зарегистрирован: 25.05.2020

Ну, если советы по делу не принимаются, остается только прикалываться ))

Pavel_1282
Offline
Зарегистрирован: 19.12.2012

Умник чего ты по делу написал?!?! иди в другом месте стебись!

v258
Offline
Зарегистрирован: 25.05.2020

Pavel_1282 пишет:
Умник чего ты по делу написал?!?! иди в другом месте стебись!

Сообщение #16. Собственно, это вполне очевидное решение, а разбор строк с поиском нужной подстроки - это вообще детская задача. А ты ждал, что я тебе готовый код предложу? Так это платная услуга ;)

Pavel_1282
Offline
Зарегистрирован: 19.12.2012

v258 пишет:

Pavel_1282 пишет:
Умник чего ты по делу написал?!?! иди в другом месте стебись!

Сообщение #16. Собственно, это вполне очевидное решение, а разбор строк с поиском нужной подстроки - это вообще детская задача. А ты ждал, что я тебе готовый код предложу? Так это платная услуга ;)


То что ты мне предложил я и без тебя знал.

v258
Offline
Зарегистрирован: 25.05.2020

Pavel_1282 пишет:

То что ты мне предложил я и без тебя знал.

Т.е. для тебя проблема считать десять символов, начиная с определенной позиции? Тогда забей, этот проект тебе не по зубам. По крайней мере пока ;)

Pavel_1282
Offline
Зарегистрирован: 19.12.2012

Умник-приколист, свое мнение при себе держи!

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

А это не только его мнение. Оно общее.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Pavel_1282 пишет:
Смотрю здесь одни прикалисты, а не программисты!

Да, это Вы, батенька - приколист. На вопросы Вы не отвечаете (я Вам в #5 задал, ответа не получил, ну, и отстал от Вас), работать не желаете, только требуете чего-то.

Я вот за всю тему так и не понял чего Вам нужно-то и почему оно у Вас не получается. Вы можете внятно объяснить, что Вы хотите сделать, что пытались и в чём загвоздка?

Pavel_1282
Offline
Зарегистрирован: 19.12.2012

вот строка с модема val:

RING
 
+CLIP: "+79671890898",145,"",0,"",0
 
DetSimen
DetSimen аватар
Онлайн
Зарегистрирован: 25.01.2017

Ну. Можешь в этой строке "+7" найти? 

b707
Offline
Зарегистрирован: 26.05.2017

Pavel_1282 пишет:

вот строка с модема val:

RING
 
+CLIP: "+79671890898",145,"",0,"",0
 

и что? Сначала ищешь в ответе "+CLIP:" , если нашел - то далее пропускаешь все символы до +?. а после него - считываешь 10 символов. это твой номер.

и выше это уже обьяснили не раз, что еще нужно то?

Komandir
Offline
Зарегистрирован: 18.08.2018

Я бы искал " и потом все символы до след " ...

b707
Offline
Зарегистрирован: 26.05.2017

Komandir пишет:

Я бы искал " и потом все символы до след " - один символ искать ЛЮТО быстрее !

ну можно много что искать, настройка шаблонов поиска - процесс итерационный :)

sadman41
Offline
Зарегистрирован: 19.10.2016

Найти двоеточие, потом чапать до запятой, пропуская пробелы и кавычки, попутно перенося символы в char[]. На выходе - готовый телефонный нумбер. По желанию приправить проверкой на недопустимые символы и длину номера. 

MaksVV
Offline
Зарегистрирован: 06.08.2015

Вангую что ТС сразу с модемом пробовать начнёт. Подсказка ТСу . сделай маленький тестовый скетч. Назначь переменную Стринг со строкой , которую ты сюда выложил и парси номер в переменную char []. Потом распечатай эту char[] в терминал , узнаешь при этом правильно ли запарсил

b707
Offline
Зарегистрирован: 26.05.2017

MaksVV пишет:
Вангую что ТС сразу с модемом пробовать начнёт. Подсказка ТСу . сделай маленький тестовый скетч. Назначь переменную Стринг со строкой , которую ты сюда выложил и парси номер в переменную char []. Потом распечатай эту char[] в терминал , узнаешь при этом правильно ли запарсил

вангую, что следущим постом мы увидим вопросы:

 - как назанчить val  в строку?

- как распечатать char[] в терминал?

 

Товарищ полностью нулевый. походу...

Pavel_1282
Offline
Зарегистрирован: 19.12.2012

Здесь видно большая часть это одни неудачники-программисты, которые ничего не могут, кроме как судить, прикалываться, писать ни о чем, когда люди за подсказкой к ним обращаются.

ТЕМА ЗАКРЫТА!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Pavel_1282 пишет:

Здесь видно большая часть это одни неудачники-программисты, которые ничего не могут, кроме как судить, прикалываться, писать ни о чем, когда люди за подсказкой к ним обращаются.

ТЕМА ЗАКРЫТА!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 

Pavel_1282, вот Вы сами, без помощи МК собственными глазками и ручками можете найти номер телефона в строке?

+CLIP: "+79671890898",145,"",0,"",0
 
Ну так опишите подробно по-русски, как Вы это будете делать. Поверьте, микроконтроллер будет все делать в точности так же, как и Вы.
Так что Вам останется лишь перевести с русского и Си++ и все. Для этого даже "неудачником-программистом" быть не нужно, достаточно чуть-чуть ориентироваться в языке, на котором пишешь. Т.е. задача вполне посильная новичку. И если Вы не хотите сделать такую малость, вряд ли Вы имеет моральное право предъявлять какие-то претензии сообществу.
DetSimen
DetSimen аватар
Онлайн
Зарегистрирован: 25.01.2017

Просто Паша думал, он ношкой топнет, и ему неудачники-программисты сразу парсер напишут. Не прокатило, надо самому трудица.  Пошёл клянчить код на другой форум

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Pavel_1282 пишет:

Здесь видно большая часть это одни неудачники-программисты, которые ничего не могут, кроме как судить, прикалываться, писать ни о чем

Так и есть! Вам не повезло с форумом, его участниками, страной и человечеством. Сочувствую!

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Фига себе, он тут с 12 года !!!! Аж восемь лет ! 

MaksVV
Offline
Зарегистрирован: 06.08.2015
ТС нытик 
 
Pavel_1282 пишет:
Здесь видно большая часть это одни неудачники-программисты, которые ничего не могут, кроме как судить, прикалываться, писать ни о чем, когда люди за подсказкой к ним обращаются.ТЕМА ЗАКРЫТА!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
MaksVV пишет:
Вангую что ТС сразу с модемом пробовать начнёт. Подсказка ТСу . сделай маленький тестовый скетч. Назначь переменную Стринг со строкой , которую ты сюда выложил и парси номер в переменную char []. Потом распечатай эту char[] в терминал , узнаешь при этом правильно ли запарсил
b707
Offline
Зарегистрирован: 26.05.2017

Макс, судя по другим форумам -  он, между прочим, твой коллега - авто-электрик :)