ну так сохранять в епроме после распознования нужной команды первый раз... дальше только номер сверять на входящий звонок либо куда звонить.. Если за определенное вознаграждение -- напишем перепроверим... там возни на пол часа - пару часов со всеми епромами и т.п. я просто так понимаю для коммерческих целей.... скайп мой p.masyukov viber +79517956505
Добрый день! Я так понимаю, здесь речь идет уже не только об одном gsm модуля, в связи с этим решил добавить свой вопрос именно в эту тему, дабы не плодить аналогичные.. Кто-нибудь пользовался модулем "А6 от Ai Thinker" ? Пытаюсь запрограммировать его через Serial (через 0,1 пины ардуино rx, tx) без использования библиотеки SoftwareSerial. Т. к. в интернете вычитал о нестабильности работы данной библиотеки на высокой скорости (у данного gsm модуля скорость "вшита" 115200). Отправлять смс получается, а вот с приемом проблема: отправляю на модуль смс и оно доставляется (в телефоне пишет, что смс доставлена), в мониторе порта тоже видит и читает текст смс, звонки также принимает стабильно. Но вот выполнить действие на ардуино какое-либо при некоторых условиях при получении смс - не получается.. Подскажите, пожалуйста, в чем "фишка" этого модуля (или нюанс написания на него скетча)? скетч для анализа работы прилагаю: Код (C++): char MASTER[] = "7960*******"; int x = 5; int y = 3; int ch = 0; String val = ""; int ledpin=13; void setup() { delay(3000); Serial.begin(115200); delay(300); delay (300); Serial.println("AT+CLIP=1");// вкл АОН //delay (300); //Serial.println("AT+CMGR=1");// читаем смс//НА ЭТО ВЫВОДИТ ERROR321 delay (300); //Serial.println("AT+CSCS=\"GSM\"");//режим кодировки текста//НА ЭТО ВЫВОДИТ ERROR321 delay (300); Serial.println("AT+CNMI=2,2"); delay(2000); pinMode(ledpin, OUTPUT); } void loop() { //=================================================================== if (Serial.available())//если что-то пришло на GSM модуль { pinMode (ledpin, HIGH); delay(2000);//выдержка времени, чтобы вся инфа успела придти на модуль прежде чем мы начнем его анализировать и успеть увидеть загоревшийся светодиод while (Serial.available()) { ch = Serial.read(); val += char (ch); // присваиваем переменной val delay(20); } if (val.indexOf("+CMT") > -1 && val.indexOf("79*********") > -1 && val.indexOf("123") > -1) { pinMode (ledpin, LOW); } } }
Код (C++): char MASTER[]="7960*******"; int x =5; int y =3; int ch =0; String val =""; int ledpin=13; void setup() { pinMode (ledpin, OUTPUT); delay(3000); Serial.begin(115200); delay(300); delay (300); Serial.println("AT+CLIP=1");// вкл АОН //delay (300); //Serial.println("AT+CMGR=1");// читаем смс//НА ЭТО ВЫВОДИТ ERROR321 delay (300); //Serial.println("AT+CSCS=\"GSM\"");//режим кодировки текста//НА ЭТО ВЫВОДИТ ERROR321 delay (300); Serial.println("AT+CNMI=2,2"); delay(2000); pinMode(ledpin, OUTPUT); } void loop() { //=================================================================== if(Serial.available())//если что-то пришло на GSM модуль { pinMode (ledpin, HIGH); delay(2000);//выдержка времени, чтобы вся инфа успела придти на модуль прежде чем мы начнем его анализировать и успеть увидеть загоревшийся светодиод while(Serial.available()) { ch = Serial.read(); val +=char(ch);// присваиваем переменной val delay(20); } if(val.indexOf("+CMT")>-1&& val.indexOf("79*********")>-1&& val.indexOf("123")>-1) { digitalWrite(ledpin, LOW); } } } Смотри внимательно... и не копируй куски -- пиши сам и почитай основы программирования хотя бы....
Спасибо большое за ответ! Я как раз только "почитаю основы", прошу за глупые ошибки не судить строго. Да, серьезная ошибка pinMode вместо требуемого digitalWrite.. Но и сейчас, после этой поправки, "не заработало"... Подскажите, пожалуйста, в чем еще ошибка? Для анализа в чем глупость новичка прикрепляю правленный скетч Код (C++): char MASTER[]="7960*******"; int x =5; int y =3; int ch =0; String val =""; int ledpin=13; void setup() { pinMode (ledpin, OUTPUT); delay(3000); Serial.begin(115200); delay(300); delay (300); Serial.println("AT+CLIP=1");// вкл АОН delay (300); Serial.println("AT+CNMI=2,2"); delay(2000); } void loop() { if(Serial.available())//если что-то пришло на GSM модуль { digitalWrite (ledpin, HIGH); delay(2000);//выдержка времени, чтобы вся инфа успела придти на модуль прежде чем мы начнем его анализировать и успеть увидеть загоревшийся светодиод while(Serial.available()) { ch = Serial.read(); val +=char(ch);// присваиваем переменной val delay(20); } if(val.indexOf("+CMT")>-1&& val.indexOf("79*********")>-1&& val.indexOf("123")>-1) { digitalWrite(ledpin, LOW); } } }
бдля начала упрощайте раз Вы только начинаете. Мне помогает. Например оставьте условие if(val.indexOf("+CMT")>-1) и помигайте только по приходу смс, а потом добавляйте условия отбора по номеру, а потом по тексту сообщения А еще у Вас не вижу обнуления значения val - уже при загрузке модуля в строке куча мусора и строка удлиняется, удлиняется до переполнения . добавьте в loop val ="";
Developer-RU, спасибо за ссылку, я видел это. Но по поводу приема/отправки смс там ничего не сказано.. Bulatovor, я упростил уже до минимума (см. скетч)... Но диод так и не загорается... Код (C++): int x = 5; int y = 3; int ch = 0; String val = ""; int ledpin=13; void setup() { delay(3000); Serial.begin(115200); delay(300); Serial.println("AT+CMGF=1");//режим кодировки смс, если вставить лишнее отправляет в смс delay (300); Serial.println("AT+CLIP=1");// вкл АОН Serial.println("AT+CMGL=1");// читает смс //delay (300); //Serial.println("AT+CMGR=1");// читаем смс//НА ЭТО ВЫВОДИТ ERROR delay (300); //Serial.println("AT+CSCS=\"GSM\"");//режим кодировки текста//НА ЭТО ВЫВОДИТ ERROR delay (300); Serial.println("AT+CNMI=2,2"); delay(2000); pinMode(ledpin, OUTPUT); } void loop() { if (Serial.available())//если что-то пришло на GSM модуль { delay(200); digitalWrite (ledpin, HIGH); delay(200); } }
Подключаю: rx<0 -> u_txd tx>1 -> u_rxd Земли объединяю. на gsm модуле перемычка: vcc-pwr питание подаю на ардуино через микро-юсб, на gsm модуль питание также подаю через микро-юсб. Перед загрузкой скетча rx tx модуля от ардуины отключаю. После загрузки скетча отключаю оба питания и заново подключаю питание после восстановления схемы (подключения rx tx)
может в данном модуле это не нужно, но в моем китайце(A6 mini) он на замыкание pwr не реагирует(где-то читал что кто-то его замыкает с VCC а у кого то требует замыкания на 2 секунды только после подачи питания). У меня модуль оживает если после подачи питания его сбросить подав на секунду на контакт RST землю
Скажите пожалуйста, кто-нибудь пробовал работу GPRS? У меня все проходит хорошо до получения IP. IP получает а вот дальше ни по TCP ни по FTP ничего не проходит....
Ребят. Может кто-нибудь помочь - очень нужны полные размеры (габаритные, места выводов колодки, маркировки на плате и прочее) такого модуля. Хочу вытравить печатку пока он едет из Китая) Буду очень благодарен
Какие нафиг там размеры?Все паяется на плате.Соединение с внешним миром через пины PLS.Что вытравливать то собираетесь?
Схема есть как будете присобачивать модуль?Или на коленке будете делать?Что конкретно интересует?У меня есть модуль отдельно от платы могу глянуть но не понял пока что и куда вы хотите травить и паять.
Я же писал что конкретно интересует - полные размеры печатной платы, которую китайцы кладут вместе с модулем (ссылка в моем первом посте). Под полными размерами я понимаю чертеж, на котором нанесены все размеры (габариты платы, крепежные отверстия, дырки под колодку и прочее) относительно какой-либо точки на плате (обычно какого-либо угла платы).