Модуль gsm, замена номера
- Войдите на сайт для отправки комментариев
Чт, 18/02/2016 - 21:16
Здравствуйте!
Подскажите можно ли в скетче заменить номер телефона, на который отправляются SMS сообщения, без использования компилятора, например, с телефона отправили сообщение и номер отправителя стал использоваться для последующей отправки SMS, или номер на который будут в будущем отправляться SMS будет заложен в тексте SMS? Или можно ли задать номер при помощи кнопок? Подскажите как это лучше сделать, и как это осуществить?
Можно.
Чтобы подсказать, надо знать как Вы его сейчас задаёте (с использованием компилятора) :)
Здравствуйте!
Подскажите можно ли в скетче заменить номер телефона, на который отправляются SMS сообщения, без использования компилятора, например, с телефона отправили сообщение и номер отправителя стал использоваться для последующей отправки SMS, или номер на который будут в будущем отправляться SMS будет заложен в тексте SMS? Или можно ли задать номер при помощи кнопок? Подскажите как это лучше сделать, и как это осуществить?
выбираю вариант ответа №4: Можно, любым из перечисленных способов.
Сейчас номер указывается в строке 43, вводится с клавиатуры комьютера. Ниже сам код. То что можно сменить номер любым способом, я предполагал, вопрос как это сделать? Помогите, если вас не затруднит, новичку дописать код, подскажите с чего начать.
#include <SoftwareSerial.h> SoftwareSerial mySerial(2, 3); // RX, TX int ch = 0; int led = 13; String val = ""; void setup() { delay(2000); //время на инициализацию модуля pinMode(led, OUTPUT); digitalWrite(led, LOW); Serial.begin(19200); //скорость порта Serial.println("GSM tester v1.0"); mySerial.begin(19200); mySerial.println("AT+CLIP=1"); //включаем АОН delay(100); mySerial.println("AT+CMGF=1"); //режим кодировки СМС - обычный (для англ.) delay(100); mySerial.println("AT+CSCS=\"GSM\""); //режим кодировки текста delay(100); mySerial.println("AT+CNMI=2,2"); delay(100); pinMode(4, INPUT); } void loop() { if (mySerial.available()) { //если GSM модуль что-то послал нам, то while (mySerial.available()) { //сохраняем входную строку в переменную val ch = mySerial.read(); val += char(ch); delay(10); } if (val.indexOf("+CMT") > -1) { //если SMS обнаружено Serial.println("--- MASTER SMS DETECTED ---"); Serial.println(val); } else Serial.println(val); //печатаем в монитор порта пришедшую строку val = ""; } if (digitalRead(4)==1) { //если увидели команду отправки СМС sms(String("hello world"), String("+7ХХХХХХХХХХ")); //отправляем СМС на номер +71234567890 } val = ""; //очищаем } void sms(String text, String phone) //процедура отправки СМС { Serial.println("SMS send started"); mySerial.println("AT+CMGS=\"" + phone + "\""); delay(500); mySerial.print(text); delay(500); mySerial.print((char)26); delay(500); Serial.println("SMS send complete"); delay(2000); }Также можно записать и изменять номер в тел. книге сим-карты, или Вам такой способ не подходит?
нет, нужно менять номер не из телефонной книги.
Тогда Вам нужно читать про EEPROM (если хотите, чтобы при отключении питания ардуины номер сохранялся) и про разбор строки на части (чтобы в тексте смс найти номер телефона, а затем его сохранить можно было, а именно indexOf и substring, также есть и другие функции работы со строками).
Спасибо за помощь! Получилось извлекать номер отправителя SMS при помощи substring, а затем на него отправлять SMS при срабатывании датчика. Но действительно номер стирается из памяти при отключении питания. Есть вопрос как сохранить номер в EEPROM. Из той информации, что нашел в интернете получилось написать вот такой скетч:
#include <EEPROM.h> // подключаем библиотеку int addr = 0; // адрес void setup() { char name[13] = "+79991112233"; // создаём массив символов EEPROM.put(addr, name); // записываем массив в EEPROM Serial.begin(9600); // инициализация послед. порта } void loop() { char c[13]; // переменная для хранения массива из 20 символов EEPROM.get(addr, c); // считываем массив символов по адресу addr Serial.println(c); // выводим массив в порт delay(60000); // ждём 1 минуту }Скетч работает, номер сохраняется в переменную "с". Но, когда я отправляю SMS модулю gsm, номер сохраняется в переменную nomer типа данных String. Для записи номера в EEPROM используется массив типа char. Т.е. мне нужно перевести переменную String в массив char для сохранения? А затем при запуске ардуины, когда программа прочтет номер из EEPROM в переменную "с" ее нужно будет преобразовать в переменную String для отправки сообщений? Верно или ерунду написал? Вот заодно часть скетча, где сохраняется номер:
if (val.indexOf("+CMT") > -1) { Serial.println("--- MASTER SMS DETECTED ---"); Serial.println(val); String nomer = val.substring(9,21); Serial.println(nomer);Так и не разобрались, сейчас тоже пытаюсь разобраться с сохранением номера в ЕЕПРОМ