Проблема вытащить строку из модема SIM800L через SoftwareSerial

morfius
morfius аватар
Offline
Зарегистрирован: 06.01.2017

Доброе время.

Столкнулся с такой проблемой. При звонке на модем высвечивается RING

Отлавливаем RING, и ищем в строке номер телефона. Если находим - что-то делаем, для примера включаем реле.

Если номер ищем коммандой mySerial.find("3343322"), все отлично, но если я делаю следующий поиск этой же коммандой другого номера mySerial.find("5544333"), он его не распознает. Т.е. тот, что я ищу первым всегда находит, а тот, что второй - уже нет.

Мысль такая, что mySerial.find ищет в этой строке, и если не находит, данные об этой строке или теряет, или смещает на что-то новое, где номера нет.

Отсюда вопрос - можно ли как-то самому вытащить эту строку RING и самостоятельно ее отпарсить?

Проблема в том, что этот .find перехватывает строку, которую выдал модем и нельзя ей оперировать.

Подскажите, что тут можно сделать. Код ниже переключает реле только когда звонит первый номер, второго не находит, и наоборот.

 

   if(gsm.find("RING")){                    // если нашли RING            
    
       if (gsm.find("3343322")){               // ищим номер телефона, если нашли
         digitalWrite(relay, !digitalRead(relay));  // переключаем реле
}
  if (gsm.find("5544333")){               // проверим номер второго авторизованного абонента
         digitalWrite(relay, !digitalRead(relay));  // если совпадает, то переключаем реле
} 
     }
 
        gsm.println("ATH0");                 // сбрасываем вызов 

 

morfius
morfius аватар
Offline
Зарегистрирован: 06.01.2017

Короче забил на эту функцию. Она кривая. Формирую String и в ней ищу то что мне нужно сколько нужно раз через

indexOf()

Иначе, ничего не получается.

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

morfius пишет:

Короче забил на эту функцию. Она кривая. Формирую String и в ней ищу то что мне нужно сколько нужно раз через

indexOf()

Иначе, ничего не получается.

И правильно, а еще лучше вытащить номер и искать его в списке разрешенных.

morfius
morfius аватар
Offline
Зарегистрирован: 06.01.2017

Кстати да, так будет правильнее с точки зрения ускорения процесса поиска, другое дело что для пары телефонов это не проблема, но лучше сразу писать правильно.

xDriver пишет:

morfius пишет:

Короче забил на эту функцию. Она кривая. Формирую String и в ней ищу то что мне нужно сколько нужно раз через

indexOf()

Иначе, ничего не получается.

И правильно, а еще лучше вытащить номер и искать его в списке разрешенных.

geniv82
Offline
Зарегистрирован: 21.02.2019

morfius пишет:

Короче забил на эту функцию. Она кривая. Формирую String и в ней ищу то что мне нужно сколько нужно раз через

indexOf()

Иначе, ничего не получается.

Здравствуйте, а можно подробнее с примером, а то у меня та же ситуация.