A6 thinker, не работает

Andrey__
Offline
Зарегистрирован: 14.05.2017

Всем привет, я не могу понять почему не работает модуль a6 thinker, точнее когда в консоли ввожу АТ команды всё работает, а компилирую код, не работает. Посмотрите код, может где ошибка есть? Тогда что я делаю не так?

Если нет, то возможно не работает сам модуль и как это можно проверить

Пробовал этот код:

Вариант 1.(Компилирую код, не работает. Картинка: Image_1)

#include <SoftwareSerial.h>
SoftwareSerial mySerial(7, 8);         // RX, TX
String phone = "+7**********";
String balance = "#100#";
void setup() {
  Serial.begin(9600);                  // Скорость порта для связи Arduino с компьютером
  delay(500);
  mySerial.begin(9600);                // Скорость порта для связи Arduino с GSM модулем
  delay(3000);
  mySerial.println("AT");
  delay(1000);
  Serial.println("AT");
  delay(1000);
  Serial.println("AT+COPS?");          // Информация об операторе 
  delay(1000);                  
  Serial.println("AT+GMM");            // Идентификатор модуля
  delay(1000);                  
  Serial.println("AT+GSN");            //IMEI
  delay(1000);                  
  Serial.println("AT+CPAS");           // Информация о состоянии модуля
  delay(1000);                  
  Serial.println("AT+CREG?");          // Тип регистрации сети
  delay(1000);
  Serial.println("AT+CSQ");            // Уровень сигнала
  delay(1000);
//  Serial.println("AT+CFUN=1,1");// нормальный режим/перезагрузка
  delay(1000);
  Serial.println("AT+CSCS="GSM"");   // Кодировка текстового режима
  delay(1000);
  Serial.println("ADT#100#");          // balance
}
 
void loop() {
  Serial.println("ADT" + phone);
  delay(10000);
  Serial.println("ATH");
  delay(100);
 
  mySerial.println("ADT" + phone);
  delay(10000);
  mySerial.println("ATH");
  delay(100);  
}

Вариант 2.(Компилирую пустой и пишу команды в консоли. Картинка: Image_2)

void setup() {
}
 
void loop() {
}

image_1

image_1

 

image_2

image_2

Logik
Offline
Зарегистрирован: 05.08.2014

Сразу думал еще один на софтовом сириале подорвался, но глянул в скетч - ан нет!

Скажите, Andrey__, как художник - художнику. Что вы хотели сказать миру своим скетчем. Я разумеется о первом, вторым Вы промолчали ;)

Либо у вас настолько хитрая схемотехника, либо код - ни о чем. Что он должен делать, даффайте по пунктам, я начну: 

1. Передавать АТ команды, предположительно на А6, которые временами на Serial, временами наmySerial, и делать паузу.

2. ....(продолжайте)

Araris
Offline
Зарегистрирован: 09.11.2012

Ну и "ADT" поменять на "ATD" стоило бы.

Andrey__
Offline
Зарегистрирован: 14.05.2017
Даже если так, то он всё равно не работает
#include <SoftwareSerial.h>
SoftwareSerial mySerial(7, 8);         // RX, TX
String phone = "+7**********";

void setup() {
  Serial.begin(9600);                  // Скорость порта для связи Arduino с компьютером
  delay(500);
  mySerial.begin(9600);                // Скорость порта для связи Arduino с GSM модулем
  delay(3000);
  mySerial.println("AT");
  delay(1000);
  mySerial.println("AT+COPS?");          // Информация об операторе 
  delay(1000);                  
  mySerial.println("AT+GMM");            // Идентификатор модуля
  delay(1000);                  
  mySerial.println("AT+GSN");            //IMEI
  delay(1000);                  
  mySerial.println("AT+CPAS");           // Информация о состоянии модуля
  delay(1000);                  
  mySerial.println("AT+CREG?");          // Тип регистрации сети
  delay(1000);
  mySerial.println("AT+CSQ");            // Уровень сигнала
  delay(1000);
  mySerial.println("AT+CSCS="GSM"");   // Кодировка текстового режима
  delay(1000);
  mySerial.println("ATD#100#");          // balance
}
 
void loop() {
  mySerial.println("ATD" + phone);
  delay(10000);
  mySerial.println("ATH");
  delay(100);  
}

 

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

Не, ну так неправильно! Думатель есть, а неонки нет! Потому и не работает :((((

Andrey__
Offline
Зарегистрирован: 14.05.2017

ЕвгенийП пишет:

Не, ну так неправильно! Думатель есть, а неонки нет! Потому и не работает :((((

А вы по делу можите писать, что не так? я же не телепат и мысли читать не умею. 

Если знаете в чем ошибка так напишите как надо делать

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

Andrey__ пишет:

я же не телепат и мысли читать не умею

Да, расслабьтесь, это была шутка и чтобы её понимать нужно читать не мысли, а классическую литературу. Неужели не узнали к какому произведению отсылка? Нет? Странно :(

Andrey__
Offline
Зарегистрирован: 14.05.2017

ЕвгенийП пишет:

Andrey__ пишет:

я же не телепат и мысли читать не умею

Да, расслабьтесь, это была шутка и чтобы её понимать нужно читать не мысли, а классическую литературу. Неужели не узнали к какому произведению отсылка? Нет? Странно :(

узнал конечно Стругацких, хорошая книжка. Но я несколько дней бьюсь над этой проблемой, а результата нет

В чём ошибка и что нужно сделать чтобы заработало?

okta
Offline
Зарегистрирован: 10.01.2015

Куча тем есть про этот модуль, почитать их не судьба...

Вас совершенно не смущает, что в коде пытаетесь общаться с модулем на 9600 бод, а руками пишете на 115200?

okta
Offline
Зарегистрирован: 10.01.2015

И предвосхищая следующий затык - 115200 на софтовом сериале не потянет. Нужно либо скорость переключать, либо пользоваться хардверным (что будет во сто крат надежнее).

Rostirun
Offline
Зарегистрирован: 15.05.2017

Друзья, подскажите пожалуйста начинающему. Модуль А6 подключен к компу через USB-UART конвертер. Входящие звонки и СМС проходят на ура. Исходящие как на картинке. В чем может быть проблемма?

Kshkoj
Offline
Зарегистрирован: 17.04.2017

Доброго утра! Сразу созрел вопрос о сериале... Подскажите, потянет ли pro mini  3,3 в (8мгц) 115200 скорость.. Хотя бы для начала, чтоб опустить скорость программно. Или как подсказывали в другом форуме - долбить АТ на скорости 9600 и он сам (модуль А6) переключится?

Andrey__
Offline
Зарегистрирован: 14.05.2017

Скорость изменил, всё по прежнему. Решил попробовать одну вещь, как можно это понять

 

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

Kshkoj пишет:

потянет ли pro mini  3,3 в (8мгц) 115200 скорость.. 

Могу ошибиться, но думаю, что нет.

Kshkoj
Offline
Зарегистрирован: 17.04.2017

Спасибо.. будем ПОдумать :-)

Kshkoj
Offline
Зарегистрирован: 17.04.2017

Кстати - по-моему, такая же проблема у автора форума... При включении модуля он ставит скорость 115200... А в проге связь на 9600... модуль не поймет ничего.... Надо как то его переключить.. 

 Serial.begin(115200); 

Serial.println("AT+IPR=9600"); 

Serial.Close;

Serial.begin(9600); 

.....

 

Или советуют передавать АТ в порт с периодичностью 2-3 разав сек, пока не придет ОК.

Объясняется это тем, что в автоматическом режиме (0) может переключиться модуль на необходимую скорость 

Сам еще не пробывал....

Скорость порта:

0 – автоматически

1200

2400

4800

9600

19200

38400

57600

115200

AT+IPR?

+IPR: 0    - автоматический режим

OK

 

 

Logik
Offline
Зарегистрирован: 05.08.2014

Kshkoj пишет:

Или советуют передавать АТ в порт с периодичностью 2-3 разав сек, пока не придет ОК.

Объясняется это тем, что в автоматическом режиме (0) может переключиться модуль на необходимую скорость 

Сам еще не пробывал....

Работает, только не 2-3 раза в сек. Лучше чаще 30-40 раз в секунду для скоростей 9600-38400. И всеравно не 100%. Иногда приходится ребутнуть.

Ermine882
Offline
Зарегистрирован: 26.04.2014

Здравствуйте, у меня проблема с симкой от Билайн, не регистрируется в сети. МТС работает нормально. В чем может быть причина? Спасибо.

Logik
Offline
Зарегистрирован: 05.08.2014

А у меня колено болит левое. А правое нормально. В чем может быть причина? Спасибо.

ПС. Не надо дублировать вопрос в разных темах. Вас просто нахер пошлют несколько раз, а могло бы одним обойтись.

Skarm
Offline
Зарегистрирован: 11.05.2017

Q

 

Ermine882
Offline
Зарегистрирован: 26.04.2014

Logik пишет:

А у меня колено болит левое. А правое нормально. В чем может быть причина? Спасибо.

ПС. Не надо дублировать вопрос в разных темах. Вас просто нахер пошлют несколько раз, а могло бы одним обойтись.

Чем не понравился вопрос? С сим картой от МТС модуль регистрируется в сети и отвечает на все команды , а с сим картой от Билайн модуль выдает следущее (в телефоне работает, вставил правильно, деньги на балансе есть, сим карты Мегафона нет что бы проверить, питание как от USB так и от импульсного БП пробовал):

^CINIT: 1, 0, 0
^CINIT: 2, 32, 41891
^STN: 38
^CINIT: 4, 8192, 38
^CINIT: 8, 2048, 1
^CINIT: 16, 0, 1638410
^CINIT: 32, 0, 0
+CREG: 0

 

AT
OK

+CIEV: service,  0
+CIEV: roam, 0

+CREG: 2
 

AT+COPS?
+COPS: 2
OK

 

AT+CREG?
+CREG: 1,12
OK

+CIEV: service,  0
+CIEV: roam, 0

+CREG: 2
 

AT+CSQ
+CSQ: 0,0
OK

+CIEV: service,  0
+CIEV: roam, 0

+CREG: 2

Поменял сим карту в Билайне, ситуация не изменилась.  Отсюда возник вопрос может есть какие то нюансы именно с Билайн или настройкой модуля.

 

 

Skarm
Offline
Зарегистрирован: 11.05.2017

Что за тариф на симке ? Проверку пин кода отключил?

Logik
Offline
Зарегистрирован: 05.08.2014

///Чем не понравился вопрос?

Отсутствием инфы о происходящемю  #20 выглядит немного лучше. Рвботает ли билайновская карта в других устройствах? В т.ч. по GPRS? Питания нужно много, мой от USB не работает с сетью, а на АТ отвечает. Работает только если єлектролит добавить. Стоит 3300мкФ.

Видт ли карту? - at+ccid

Ermine882
Offline
Зарегистрирован: 26.04.2014

Skarm пишет:

Что за тариф на симке ? Проверку пин кода отключил?

Тариф «Добро пожаловать», пин код отключен.

Ermine882
Offline
Зарегистрирован: 26.04.2014

Logik пишет:

///Чем не понравился вопрос?

Отсутствием инфы о происходящемю  #20 выглядит немного лучше. Рвботает ли билайновская карта в других устройствах? В т.ч. по GPRS? Питания нужно много, мой от USB не работает с сетью, а на АТ отвечает. Работает только если єлектролит добавить. Стоит 3300мкФ.

Видт ли карту? - at+ccid

1. Сим карта работает в телефоне (пробовал в 2х телефонах) в т.ч. и GPRS.

2. Модуль нормально работает от USB (по крайней мере у меня) с сим картой МТС (звонки и смс - передача и приём), хотя пробовал и от стороннего БП.

3. at+ccid
    +CCID:8970199170120614308F
    OK

Logik
Offline
Зарегистрирован: 05.08.2014

Дальше запускайте поиск сети. Работает всегда при нормальном питании и исправном радиомодуле. Полезно следить за потреблением, хотяб по просадке свечения светодиода на ардуино.

У Вас по логу непонятка, качество сигнала 0, а регистрация в сети есть. Так не бывает. Команды сразу после включения подаете? паузы между ними есть? У меня +CIEV очень не сразу приходит. Сделайте паузу после АТ. Дайте ему спокойно зарегится, может он просто не успевает.

То что модуль имеет проблему с питанием и из за этого работает не со всеми картами вполне возможно, мощности разные, до БС разное расстояние и т.д.

Ermine882
Offline
Зарегистрирован: 26.04.2014

 

Продолжаю эпопею с модемом А6 который категорически отказывается работать с  Билайном.

Logik пишет:

То что модуль имеет проблему с питанием и из за этого работает не со всеми картами вполне возможно, мощности разные, до БС разное расстояние и т.д.

Прислушался к совету Logik, запитал модем от стронних БП - 5в 1А и 5в 2А, результат не изменился.

На скриншотах видна отличительная черта инициализации модема на разных сим картах.

            
Первый скриншот сим карта Билайн, второй МТС, что характерно при регистрации в сети МТС модуль возвращает время сети.

Жду совета куда копать дальше.

 

vvadim
Offline
Зарегистрирован: 23.05.2012

А6 работает только на хардверном сериале и скорость 115200 у него не меняется, зашита навсегда))))

Logik
Offline
Зарегистрирован: 05.08.2014

нет.))))))))

Logik
Offline
Зарегистрирован: 05.08.2014

Ermine882 пишет:

Первый скриншот сим карта Билайн, второй МТС, что характерно при регистрации в сети МТС модуль возвращает время сети.

Про время - http://arduino.ru/forum/apparatnye-voprosy/gsm-modem-a6-v-rezhime-tcp#comment-283304

Оно не у всех операторов. Про различие параметров инициализации - смотрим по доке. Хотя она такая кривая, что может и не помочь.

А билайн у вас не WCDMA часом?

Ermine882
Offline
Зарегистрирован: 26.04.2014

Logik пишет:

А билайн у вас не WCDMA часом?

LTE, так же как и МТС

vvadim
Offline
Зарегистрирован: 23.05.2012

Logik пишет:

нет.))))))))

вот вычитал

1. baud rate is fixed to 115200

2. serial communication only work with hardware serial ( now way it will work with software serial for arduino)

okta
Offline
Зарегистрирован: 10.01.2015

Хоть бы ссылку давали, откуда цитата.

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

Скорость на нем не зафиксирована, а установлена поумолчанию - это совершенно разные вещи.

Kshkoj
Offline
Зарегистрирован: 17.04.2017

Проэксперементировал с Про мини 3,3 в 8 мгц на скоростиподключения  115200... все нормально отработало.. Модуль отлично читался. Но для надежности перевожу GSM модуль на 9600 и работаю дальше. Перевод GSM непрерывным обращением АТ на 9600 не получился...

 

Logik
Offline
Зарегистрирован: 05.08.2014

Чтоб перевести на 9600 надо подавать АТ довольно долго.Делаю так


	  if(StatModem==UNKNOWN)
	  {
	    SendAT(F("AT"));
	    digitalWrite(13,ww&1);
	    ww++;
	    delay(ww%200?24:200);
	     
	    return;
	  }

подробней - http://arduino.ru/forum/apparatnye-voprosy/gsm-modem-a6-v-rezhime-tcp .

Через несколько секунд начнет отвечать. Иногда дольше ждет, если например модему дали команду поиска сети, он ищет секунд 20. Пока не закончит перевод будет игнорироватся. Переводил на 9600 и 38400 - ОК.

Logik
Offline
Зарегистрирован: 05.08.2014

vvadim пишет:

Logik пишет:

нет.))))))))

вот вычитал

1. baud rate is fixed to 115200

2. serial communication only work with hardware serial ( now way it will work with software serial for arduino)

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

Kshkoj
Offline
Зарегистрирован: 17.04.2017

А можно по-подробнее, что означают параметры в delay(ww%200?24:200) и ww&1

Я пока не всю грамматику изучил :о) . Раньше на Дельфях практиковал. 

Logik
Offline
Зарегистрирован: 05.08.2014

Оч странно что Вас так долго не заклевали за злобное незнание Си ;)

Все просто delay(..), - делаем паузу в исполнении кода, функция оч плохая. Но в данном случае её применение оправдано - пока мы не законектимся к модему, в данном приложении другой работы нет. ww%200 -остаток от деления, в делфи было как mod. Конструкция ..?24:200 работает так, если то, что перед ? истина (или не ноль просто) то берется значение между ? и :, иначе то что после : Хорошая штука в общем, особенно для выноса мозга новичкам ;)

Kshkoj
Offline
Зарегистрирован: 17.04.2017

Спасибо за пояснение :-) Заклевать просто не успели... недавно зарегистрировался :о) Да и ардуинки ковыряю чуть больше... До сих пор присваиваю при помощи := и сравниваю "=" :-) И долго не могу понять что не так. 

С delay я знаком, а с (..) мне было не понятно... Еще рас спасибо.. но в Си как то лезть не хочется... :-) 

Logik
Offline
Зарегистрирован: 05.08.2014

А прийдется! )))

Kshkoj
Offline
Зарегистрирован: 17.04.2017

Ох, чую, это угроза. Тогда точно плевать меня придётся.
Кстати, столкнулся с проблемой аппаратного характера. Почему-то в наушниках нет звука. У меня А6 мини. Выводы только наушников. Прикоснулся наушгиками к контактаи спикера на чипе, зввук есть. Ни кто с этим не сталкивался? Наверное, буду подпаиваться к чипу...

Kshkoj
Offline
Зарегистрирован: 17.04.2017

Гм..
Плевать- клевать...

Logik
Offline
Зарегистрирован: 05.08.2014

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

ПС. Граматика и описки на форуме давно похерены. Просто игнорируются если смысл понятен. Даже в самых "кровавых" спорах уже очень давно никто не упрекал кого либо в ошибках в тексте, то ли дело из даташита не ту цыфру глянул )) Тогда лошара ;)  И очень правильно, мы тут над слишком серезными вещами прикалываемся, чтоб обращать внимание на пустяки ;)

Kshkoj
Offline
Зарегистрирован: 17.04.2017

Ну я не русский, поэтому маскируюсь под грамматного. :0). Тогда переходим к серьезному. Мне как раз голосовые функции интересуют. Просто телефон принимать-набирать .

Kshkoj
Offline
Зарегистрирован: 17.04.2017

Вот такой аппарат попростили сделать...

Logik
Offline
Зарегистрирован: 05.08.2014

Kshkoj пишет:
Ну я не русский, поэтому маскируюсь под грамматного. :0). Тогда переходим к серьезному. Мне как раз голосовые функции интересуют. Просто телефон принимать-набирать .

Ну так это с точки зрения ПО элементарщина. А вот чтоб звук достаточно грромкий был может и усилок потребоватся.

Сунуть в старый корпус телефона GSM модуль  была оригинальная и интересная мысль. Но только первый раз много лет назад ;) С тех пор это уже столько раз делалось, что оригинальным назвать тяжело. Оно того не стоит. Хотя корпус на фотках очень интересный. Весь из металла? Дак прийдется антенку выводить.

Kshkoj
Offline
Зарегистрирован: 17.04.2017

Я понимаю, что это не новая мысль.. но друг хочет товарищу подарок сделать :-) А с антенной - думаю, что придется по-эксперементировать .  Была мысл - в корпус от старого модема всунуть.. там и антенна есть... а к нему уже провода тянуть... но боюсь, заморочки возникнут с микрофоном...

 

igor_vector
Offline
Зарегистрирован: 03.01.2021
// Igor skype vector_moscow 
 
//  на основе https://iarduino.ru/file/ 
//  Библиотека для работы с GSM/GPRS Shield A6: http://iarduino.ru/shop/Expansion-payments/gsm-gprs-shield.html
//  Версия: 1.0.1
//  Последнюю версию библиотеки Вы можете скачать по ссылке: http://iarduino.ru/file/345.html
//  Подробное описание функции бибилиотеки доступно по ссылке: https://wiki.iarduino.ru/page/gsm-gprs-shield/
//  Библиотека является собственностью интернет магазина iarduino.ru и может свободно использоваться и распространяться!
//  При публикации устройств или скетчей с использованием данной библиотеки, как целиком, так и её частей,
//  в том числе и в некоммерческих целях, просим Вас опубликовать ссылку: http://iarduino.ru
//  Автор библиотеки: Панькин Павел
//  Если у Вас возникли технические вопросы, напишите нам: shop@iarduino.ru
 
 
 
#include <SoftwareSerial.h>    
SoftwareSerial mySerial(7,8);  // TX, RX
 
 
uint8_t  _num(char symbol){                                                          //  Аргументы функции:  символ 0-9,a-f,A-F.
      uint8_t i = uint8_t(symbol);                                                          //  Получаем код символа
      if ( (i>=0x30) && (i<=0x39) ) { return i-0x30; }else                                              //  0-9
      if ( (i>=0x41) && (i<=0x46) ) { return i-0x37; }else                                              //  A-F
      if ( (i>=0x61) && (i<=0x66) ) { return i-0x57; }else                                              //  a-f
                      { return      0; }                                                //  остальные символы вернут число 0.
}                                                                             //  
void  _SMSdecodUCS2(char  *txt,  String strBuffer){                                         //  Аргументы функции:  txt - строка для текста, len - количество байт в тексте, pos - позиция начала текста в строке strBuffer.
      uint8_t  byteThis = 0;                                                              //  Определяем временную переменную для хранения значения очередного читаемого байта.
      uint8_t  byteNext = 0;                                                              //  Определяем временную переменную для хранения значения следующего читаемого байта.
      uint16_t numIn    = 0;                                                              //  Определяем временную переменную для хранения номера   очередного читаемого байта.
      uint16_t numOut   = 0;                                                              //  Определяем временную переменную для хранения номера   очередного раскодируемого символа.
      int pos= 0;
      
while(numIn<strBuffer.length()){     
  byteThis = _num(strBuffer.charAt(pos+numIn))*16 + _num(strBuffer.charAt(pos+numIn+1)); numIn+=2;                  //  Читаем значение очередного байта в переменную byteThis.
            byteNext = _num(strBuffer.charAt(pos+numIn))*16 + _num(strBuffer.charAt(pos+numIn+1)); numIn+=2;                  //  Читаем значение следующего байта в переменную byteNext.
            if(byteThis==0x00){                            txt[numOut]=byteNext;      numOut++;}else                      //  Символы латинницы
            if(byteNext==0x01){txt[numOut]=0xD0; numOut++; txt[numOut]=byteNext+0x80; numOut++;}else                      //  Симол  'Ё'       - 04 01          =>  208 129
            if(byteNext==0x51){txt[numOut]=0xD1; numOut++; txt[numOut]=byteNext+0x40; numOut++;}else                      //  Симол  'ё'       - 04 81          =>  209 145
            if(byteNext< 0x40){txt[numOut]=0xD0; numOut++; txt[numOut]=byteNext+0x80; numOut++;}else                      //  Симолы 'А-Я,а-п' - 04 16 - 04 63  =>  208 144 - 208 191
                              {txt[numOut]=0xD1; numOut++; txt[numOut]=byteNext+0x40; numOut++;}                        //  Симолы 'р-я'     - 04 64 - 04 79  =>  209 128 - 209 143
          }                      txt[numOut]=0;       }
 
 
 
void  _SMSdecod8BIT(char  *txt,  String strBuffer){                                         //  Аргументы функции:  txt - строка для текста, len - количество байт в тексте, pos - позиция начала текста в строке strBuffer.
      uint16_t numByteIn  = 0;                                                            //  Определяем временную переменную для хранения номера   очередного читаемого байта из строки strBuffer.
      uint16_t numByteOut = 0;                                                            //  Определяем временную переменную для хранения номера очередного раскодируемого символа для строки txt.
      while(numByteOut<strBuffer.length()){                                                              //  Пока номер очередного раскодируемого символа не станет больше объявленного количества символов.
        txt[numByteOut]= _num(strBuffer.charAt(numByteIn))*16 + _num(strBuffer.charAt(numByteIn+1)); numByteIn+=2; numByteOut++;      //  Читаем значение байта с номером numByteIn в символ строки txt под номером numByteOut.
      } txt[numByteOut]=0;                                                              //  Присваиваем символу len+1 значение 0 (конец строки).
}                                                                             //  
 
                    
const int  pinPWR  =9;
 
byte b;
 
 
unsigned short index[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
 
bool TestStr(const String s, const unsigned short  i )
{
  if  (s[index[i]] == b )
  {
    if (++index[i] == s.length())
    {
      index[i] = 0;
      Serial.println();
      Serial.println("TEST OK : " + s);
 
      return true;
    }
  }
  else
    index[i] = 0;
  return false;
 
 
}
 
 
 
void updateSerial()
{
       uint32_t millisEnd = millis() + 1000; 
       while(millis()<millisEnd )
       {
            int b1 = mySerial.read();
            if (b1==-1) 
            
            if (TestStr("\r\nOK\r\n", 5))
              return;
        else
            continue;           
 
            
            b = b1;
            Serial.write(b1 );//Forward what Software Serial received to Serial Port
 
             
       }     
 
}
 
 
 
void setup()
{
 
 
  Serial.begin(9600);
  Serial.println("GM");
   
 
      pinMode     (pinPWR, OUTPUT);                                               
      digitalWrite(pinPWR, HIGH); 
      delay(2000); 
      digitalWrite(pinPWR, LOW ); 
 
 
mySerial.end();
mySerial.begin(57600);
mySerial.setTimeout(400);
 
//mySerial.begin(115200);
 
//mySerial.println("ATZ+IPR=9600");
//updateSerial();
//mySerial.end();
//mySerial.begin(9600);
//updateSerial();
 
  mySerial.println("AT");          //Once the handshake test is successful, it will back to OK
  updateSerial();
 
mySerial.println("ATE0");          //Once the handshake test is successful, it will back to OK
updateSerial();
 
  mySerial.println("at+cgmi"); //his AT command returns information about device manufacturer.
  updateSerial();
 
  mySerial.println("at+cgmr"); //  This AT command returns the revision information of the mobile termina.
  updateSerial();
 
 
  mySerial.println("AT+CSQ");      //Signal quality test, value range is 0-31, 31 is the best
  updateSerial();
 
  mySerial.println("AT+CCID");    //Read SIM information to confirm whether the SIM is plugged
  updateSerial();
 
  mySerial.println("AT+CREG?");    //Check whether it has registered in the network
  updateSerial();
 
 
  mySerial.println("AT+CSQ"); // ommand returns the signal strength of the device. 
  updateSerial();
 
  //Execution command returns received signal strength indication
  //<rssi> and channel bit error rate <ber> from the MT.
 
  mySerial.println("AT+COPS?");  //Для того, чтобы получить информацию о всех доступных операторов нужно ввести команду
  updateSerial();  //25032
 
 
  mySerial.println("AT+CGREG?");
  updateSerial();  //0,5 – Registered, non-home network
 
  mySerial.println("AT+CMEE=2"); // AT+CMEE AT command enable or disable the use of result code ..
  updateSerial();
 
  //AT+CIMI  дает информацию по сим-карте, а именно ее IMSI номер.
 
  mySerial.println("AT+CPOL?"); // command is used to set the PLMN selecto
  updateSerial();
 
  mySerial.println("at+cclk?");  // время
  updateSerial();
 
  mySerial.println("AT+CLIP=1"); // рхи полезный параметр. Включает режим CLI (Calling Line Identification) или то, что по русски зовется АОН. По
  updateSerial();
 
  mySerial.println("AT+CSCS=\"HEX\"");
  updateSerial();
 
   mySerial.println("AT+CSCS?");
   updateSerial();
 
mySerial.println("AT+CUSD=1,*100#,15");
      
  uint32_t millisEnd = millis() + 8000; 
  while(millis()<millisEnd)              
  {
   int b1 =  mySerial.read();
   if (b1 == -1 )
    continue;
    
   Serial.write(b1); 
   b = b1 ;
   
   if (  TestStr("+CUSD: 2, \"", 4)) 
   {
     String s = mySerial.readStringUntil('"');
     Serial.println();
     Serial.println(s);
     char buf[100];
     _SMSdecodUCS2(buf, s );
 
 
      Serial.println(buf);
      break;
   } 
  }
Serial.println("GM END");
 
}
 
 
 
 
bool KotelOn = false;
bool DoMakeChuponRing = false;
 
 
void loop()
{
 
  while (Serial.available())
    mySerial.write(Serial.read());  
 
    int b1 = mySerial.read();
    if (b1 == -1)  return;
 
    b = b1;
    Serial.write(b);   //Forward what Software Serial received to Serial Port
 
    if (  TestStr("+CLIP: \"79788188039\",145,,,,1", 1))
    {
 
      KotelOn = ! KotelOn;
      Serial.print("KotelOn:");
      Serial.println( KotelOn);
      DoMakeChuponRing =  true;
    };
 
 
    if  (TestStr("RING", 2)  )
    {
      
      if  (DoMakeChuponRing)
      {
        if (KotelOn)
        {
          mySerial.println("ata");
          updateSerial();
          mySerial.println("AT+VTS=1,10");
          updateSerial();
          mySerial.println("AT+VTS=2,9");
          updateSerial();
          mySerial.println("AT+VTS=3,8");
          updateSerial();
          mySerial.println("AT+VTS=4,7");
          updateSerial();
          mySerial.println("AT+VTS=6,6");
          updateSerial();
          mySerial.println("AT+VTS=7,5");
          updateSerial();
          mySerial.println("ath");
           updateSerial();
           mySerial.println("ATD+79788188039;");
           updateSerial();
        }   
          else
       {   
          mySerial.println("ata");
          updateSerial();
          mySerial.println("AT+VTS=D,10");
          updateSerial();
          mySerial.println("AT+VTS=C,10");
          updateSerial();
          mySerial.println("AT+VTS=B,10");
          updateSerial();
          mySerial.println("AT+VTS=A,10");
           updateSerial();
          mySerial.println("ath");
           updateSerial();
           mySerial.println("ATD+79788188039;");
           updateSerial();
                   
        }   
        DoMakeChuponRing = false;
      }
      
    
 
   //   mySerial.println("AT+CFUN=1"); //     перезагрузка модема, очень полезная команда не требует "передергивать" модем. После перезагрузки модем перерегистрируется в сети оператора.
    //mySerial.println("AT+CLIP=1");
 
    //  updateSerial();
    ///mySerial.println("at+cusd=1,*100#,15");
    //updateSerial();
    //AT+CHUP command causes the mobile terminal to hangup the current call
  }
 
}
 
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Это вот чё щас было?