Не могу распарсить / Arduino Pro Mini / GSM SIM900
- Войдите на сайт для отправки комментариев
Пнд, 05/12/2016 - 10:07
Здравствуйте!
В программировании я чайник, конкретно Arduino начал заниматься совсем недавно. Появилась проблема в управлении удаленным устройством с помощью DTMF кодов.
Подключаю GSM-модуль SIM900 к компьютеру, открываю терминал и даю в терминале такие команды:
AT+CLIP=1
AT+DDET=1
После чего делаю дозвон на модуль с мобильного телефона, поднимаю трубку командой ATA и при нажатии цифровых кнопок на телефоне у меня в терминале отображаются декодированные сигналы в виде +DTMF:1, +DTMF:2 и т.д.
После чего подключаю модуль к Arduino, снова делают дозвон. Arduino обнаруживает входящий звонок с помощью такого кода:
while (Serial.available() > 0) {
int inChar = Serial.read();
inString += (char)inChar;
if (inChar == '\n') {
if (inString.startsWith("RING")) {
Serial.println ("ATA");
delay (1000);
Serial.println ("AT+VTS=#");
bl_blink();
}
if (inString.startsWith("+DTMF")) {
bl_blink();
}
inString = "";
}
}
После поднятия трубку он пикает мне в ответ командой AT+VTS=#, чтобы я мог убедиться, что система работает. Однако на этом все. Я никак не могу получить строку, содержащую "+DTMF:x", чтобы выполнить какую-либо команду по нажатию кнопки на телефоне.
Подскажите пожалуйста, что не так.
Код полностью показали бы. Конкретно в этом куске криминала не вижу.
И да, вот здесь почитайте
Весь код к сожалению привести здесь не могу, т.к. права на него принадлежат работодателю и он используется в коммерческих целях. Да и нет там в принципе ничего больше относящегося к связи.
Когда вывожу строку для отладки на дисплей устройства, то видно все, вплоть до "RING" с номером звонящего абонента. После этого строка остается пустая, несмотря на нажатия кнопок на телефоне. После разрыва соединения в строке появляется "NO CARRIER", т.е. обмен данными между контроллером и GSM-модулем работает нормально.
СМС тоже распарсивается нормально, и заголовок и тело сообщения. Но вот почему я не могу прочитать это несчастное "+DTMF:" - я понять не могу. На компьютере же прекрасно это видно в терминале.
Весь код к сожалению привести здесь не могу, т.к. права на него принадлежат работодателю и он используется в коммерческих целях.
Тогда вам к экстрасенсам...
Да и нет там в принципе ничего больше относящегося к связи.
Эммм... ну как минимум где-то должна быть прописана комманда AT+DDET=1
Эммм... ну как минимум где-то должна быть прописана комманда AT+DDET=1
В первом посте есть команды инициализации, которые у меня прописаны в SETUP.
А именно:
Serial.begin (19200);
Serial.println ("AT+CLIP=1");
Serial.println ("AT+DDET=1");
Я вижу порочную практику вставлять delay в цикл Serial.aviable()
И не понятно, что происходит когда из этого цикла вываливается. А вывалиться может и посредине строки.
Вообще лучше всего, читать из порта так как это делают во всех библиотеках для текстового общения с устройствами по UART:
Проблема как-то решилась?
Доброго всем дня. У меня таже проблема. Сериалпорт не выводит строку +DTMF:Х.
Код:
Инфа о модеме ("AT + GSV"): http://imgdisk.ru/image/rPXE
Вот что видно в серийнике: http://imgdisk.ru/image/rPXM
Кнопки я естественно нажимал. Проверено в службе поддержки МТС, на офисных АТС
Картинки сюда вставить так и не смог...