Официальный сайт компании Arduino по адресу arduino.cc
Ответное СМС
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Чт, 21/01/2016 - 22:43
Имеется Уно, gsm Shield sim900.
Необходимо отправить ответное смс.
Вот так я настраиваю модуль в setup:
Serial.begin(19200); Serial.print("AT+CMGF=1\r");// устанавливает текстовый режим смс-сообщения delay(300); Serial.print("AT+IFC=1, 1\r");// устанавливает программный контроль потоком передачи данных delay(300); Serial.print("AT+CPBS=\"SM\"\r");// открывает доступ к данным телефонной книги SIM-карты.! delay(300); Serial.print("AT+CNMI=1,2,2,1,0\r"); // Настройка вывода смс.! delay(500); Serial.print("AT+CMGD=1,4\r");//удалить все смс delay(500);
Далее определяю номер входящего смс:
if(currStr.startsWith("+CMT")) { //если начинается с CMT то далее следует номер String num = currStr.substring(currStr.indexOf("\""),currStr.indexOf(",")); // выделяем номер //печатаем что получилось на лсд lcd.setCursor(0,0); lcd.print(num); }
на экране появляетя: "+7xxxxxxxxxxx" , тоеть номер приславшего смс в кавычках
А вот так отправляю смс:
Serial.print("AT+CMGF=1\r"); //текстовый режим delay(100); // даём время на усваивание команды // Устанавливаем адресата: телефонный номер в международном формате Serial.println("AT + CMGS = \"+7xxxxxxxxxx\""); delay(100); Serial.println((char)26);
Внимание вопрос!
Как подставить определенный ранее номер в строчку:
Serial.println("AT + CMGS = \"+7xxxxxxxxxx\"");
Что то не получается, что не так делаю?
Вначале обявляю:
Отправляю смс:
на экране все также номер появляется но смс ответное не приходит
Вот что типа такого получается
а номер в кавычках появляется?
всмысле когда на экран вывожу?
да на экране появляется
и да он в кавычках появляется))
неа, и так не получается
после 74 строки добавить
загрузил вот этот скетч:
и чет ничего не приходит, меняю 68ю строку на
где хххх - мой номер и сообщение приходит
g:70: error: missing terminating " character
g.ino: In function 'void sendTextMessage()':
g:72: error: expected ')' before ';' token
missing terminating " character
не компилится
верните обратно
походу придется записать номера и сверяясь с ними отправлять на тот с которым совпал номер приславшего запрос.
пичалька конечно, кода шибко уж много на это уйдет.
никак не плучиось?
тоже интересует запись звонящего...
запись то не сложно сделать, если лишние знаки не смущают, а вот отправить на него смс у меня не получилось.
записал все номера в память и отправляю смс тому с кем совпал номер приславшего.
а писать номера на смкарту?
нет этого я не умею
помоему это будет еще проще, ат команды хорошо везде описаны, даже здесь:
вкл нужную записную книжку, переключить в текстовый режим, позвонить по такому то номеру ячейки, и т.д.
записывать номер в ячейку просто:
запоминаем номер звонящего, далее сравниваем его с имеющимся
я примерно так делаю.
вероятно чтобы сравнить с телефоном на симке, надо с симки считать номер и записать его в другую переменную. тут может быть проблема в том что считывается номер в кавычках а на симке номер наверняка без ковычек - может не получится. так что вообще я хз, лучше спроси кто лучше знает.
а может тебе как и мне проще определить номера кто будет обращаться к устройству.
описание многих смс можно посмотреть и здесь тоже:
http://we.easyelectronics.ru/part/gsm-gprs-modul-sim900-chast-vtoraya.html
я тестировал просто на модеме разные.
А у меня такой случай был - номер звонящего определялся на телефоне как 8(___)ххххххх, но на него смс-ки не отправлялись (но звонок проходил!!!). Поэтому приходилось в записной книжке держать два номера - +7(___)ххххххх и 8(___)ххххххх. Первый для смс, второй для идентификации ФИО звонящего.
смс отпрааляются исключительно в формате!: +......... и никак не иначе.
да и звонить тоже так нужно.
а может тебе как и мне проще определить номера кто будет обращаться к устройству.
когда то попадалась инфа, что есть смс команда: если номер занесен на симкарту с именем - то при вкл аоне и звонке этот номер отображается с именем!!
модем 590й. кто бы смс подсказал какая?
пробовал этот пример, вот только не понял - потом значение num само обнуляется, а вот почему так и не нашел. тоесть если сразу после этого примера вывести в сериал то видно номер, а если в программе потом значение считывать - пусто.
а почему num объявляется 2 раза: в строчке 3 как глобальная, а затем локально в 47. Разве в таком виде значение переменной уйдет в функцию отправки SMS?
Совершенно верно. В 47-й строчке нужно убрать String перед num
а если num в память запоминать, то как считывать в начале?
String num =
"EEPROM.read(1)"
;
и писать EEPROM.write(1, num);
знаю, что неверно написал, но суть вы поняли, так как правильно сделать?
прежде всего определись с типом переменной. Ты объявляешь num как string, а в память читается и пишется byte.
я знаю, но где почитать грамотное обьяснение типов переменных и как с ними правильно работать? в интернете просто нету понятных обьяснений. Вот поэтому и приходится путем проб и ошибок.
нашел это, смотрю - http://arduino.ru/forum/programmirovanie/zapis-i-chtenie-eeprom-peremennykh-tipa-float-unsigned-long-long-unsigned-int
пример сверху - ближе к нужному? я так понимаю нужно записывать и считывать 14 знаков (текстовых?) с некоего адреса в ЕЕПРОМ например "1". но какправильно - пока е ясно.
или лучше использовать типа другую подобную библиотеку - http://www.freeduino.ru/arduino/files/EEPROM2.zip ??
Если кому интересно, вот тут есть реализация ответного смс, правда с библиотеками.
http://www.ansealk.ru/wiki/doku.php?id=gsm-gprs_shield_tinysine_sim900#arduino_mega_2560
Может кто знает как в этой библиотеке на меге перенести тх и рх с 18 и 19 на 14 и 15 пины
В примерах есть строчка:
в GSM.cpp есть такая строчка:
но что бы я там не писал ардуино всеравно использует 18 и 19 пины.
Или еще лучше, может кому удалось подружить мегу и жсм модуль от Tinysine c мегой2560 без библиотек.
Методом научного тыка выяснил что нужно в файле HWSerial.cpp заменить все упоминания serial1 на serial3