PCCar.ru - Ваш автомобильный компьютер

PCCar.ru - Ваш автомобильный компьютер (http://pccar.ru/index.php)
-   Модемы GSM (http://pccar.ru/forumdisplay.php?f=168)
-   -   Arduino + GSM (http://pccar.ru/showthread.php?t=25719)

lti1 11.03.2017 15:38

Цитата:

Сообщение от Xellow (Сообщение 383909)
Добрый день. Не могу найти как сформулировать условие выполнения команды по СМС только от одного заданного номера, код из примера - как хотелось бы видеть...

void getsms()
{
sms.GetSMS(pos,n,20,smsbuffer,160);
//Serial.println(n); //номер входящей СМС
//Serial.println(smsbuffer); //текст сМС
input_string =String(smsbuffer);
if ((n) != (n1)) - //Если номер входящей СМС не соответствует заданному (char n1[] = "+79XXXXXXXXX";)
{
sms.DeleteSMS(pos); - //Удаляем эту СМС
delay(1000);
}


Собственно вопрос - как правильно сформулировать выделенное цветом условие?

Так попробуйте:
PHP код:

if(strstr(nn1) != NULL) {
если номер совпадает
}
else {
если номер не совпадает



skanch 11.03.2017 15:52

Цитата:

Сообщение от Xellow (Сообщение 383909)
...условие выполнения команды по СМС только от одного заданного номера...

Объявить в "шапке"
PHP код:

char adminNumber[] = "+7**********"//Ваш номер телефона 

и далее

PHP код:

if(strcmp(numberadminNumber) == 0//принимать СМС только с определенного номера 

Как вариант...

Xellow 11.03.2017 16:50

Респект! Работает!
Код пишется, в принципе основные хотелки реализованы, но пока без энергосбережения... Что получится - выложу, если будут желающие его улучшить- только "за"). Писатель я не очень..

Xellow 12.03.2017 17:00

Вложений: 1
Ну вот примерно что получилось... Что работает: Старт - стоп по СМС, возврат данных о напряжении сети и температуре по СМС запросу, старт по температуре и останов от аварийного сигнала(опущен ручник, включена передача). Все события подтверждаются соответствующими СМС. Теперь чего нет: Энергосбережение(((, ардуину не усыпить, т.к. нужно мерить температуру и напряжение, а SIM800, при включении режима энергосбережения - ведёт себя неадекватно(может руки кривые). В общем то сам скетч - это выдержки из разных творений на просторах интернета, собранные в один, так что прошу сильно не пинать если что))). Сам код автозапуска уже полтора года трудится у меня в машине, без особых нареканий. Энергопотребление получилось около 20мА, позже перемерю более точным прибором. Если будет желание, что либо поправить - буду только ЗА. Есть одна замеченная проблема!!! Если в результате каких либо манипуляций СИМ забивается необработанными СМС, то конструкция перестаёт функционировать, до очистки СИМ через АТ команды. Как это прописать в коде я не разобрался((.

skanch 12.03.2017 17:58

Удаление всех СМС АТ- команда "AT+CMGD=4". Все команды можно посмотреть здесь.

Xellow 12.03.2017 18:36

Я эти команды знаю.. но не могу их в скетч корректно встроить.. По чему то все варианты отправки АТ команд, которые я пробовал встроить в скетч - делали его не работоспособным((( Пробовал так:
gsm.SimpleWrite(F("AT+CMGDA=DEL ALL"));
gprsSerial.print("AT+CMGDA=DEL ALL");
GsmSerial.println("AT+CMGDA=DEL ALL");

Xellow 12.03.2017 20:13

Поэкспериментировал ещё... Прописал Serial.print("AT+CMGDA=DEL ALL");
Скетч работает, в сериале команда проходит, но СМС не удаляет(( в порт прописывает следующее:
ATT: "REC READ"
RIC:
+CMGR: "REC READ","+79ххххххххх","","17/03/12,19:10:53+12"
6

OK

AT+CMGDA=DEL ALLATT: OK
RIC: NO STRING RCVDATT: OK
RIC: NO STRING RCVDATT: OK
RIC: NO STRING RCVDATT: OK
RIC:

ATT: OK
RIC:
OK

skanch 12.03.2017 21:04

А такой вариант на прошел?
PHP код:

Serial.println("AT+CMGD=4");//Удаляем всё SMS которые могут содержаться на сим карте. 


Xellow 12.03.2017 22:09

Странно, но AT+CMGD=4, не удаляет СМС, даже в режиме подачи АТ команд напрямую из консоли.

skanch 12.03.2017 23:41

Здесь подсмотрел вариант

PHP код:

{
 
gsm.begin(2400);
 
delay(10000);
 for(
1<= 21i++)
 {
   
sms.DeleteSMS(i);
 } 



Часовой пояс GMT +4, время: 20:15.

Работает на vBulletin® версия 3.8.4.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot