Взаимодействие с GPRS Шилдом

Тема в разделе "Arduino & Shields", создана пользователем Vovka41, 15 фев 2014.

  1. Vovka41

    Vovka41 Нерд

    Всем привет. Такой вот вопрос. Хочу сделать так, что ардуино отвечал сообщением "привет" на тот номер, с которого пришло сообщение. И сделать так, что он мог отвечать только "друзьям", а на посторонние номера никак не реагировал. Пока только так получилось, но это не подходит. Помогите, ребята.

    #include <SoftwareSerial.h> // подключение библ для смс отправки
    SoftwareSerial gprsSerial(0,1); // Пины для GPRS шилда
    String currStr = "";

    // Переменная принимает значение True, если текущая строка является сообщением
    boolean isStringMessage = false;

    void setup()
    {
    gprsSerial.begin(19200);

    // Настраиваем приём сообщений с других устройств
    gprsSerial.print("AT+CMGF=1\r");
    gprsSerial.print("AT+IFC=1, 1\r");
    gprsSerial.print("AT+CPBS=\"SM\"\r");
    gprsSerial.print("AT+CNMI=1,2,2,1,0\r");
    }
    String currStr = "";

    // Переменная принимает значение True, если текущая строка является сообщением
    boolean isStringMessage = false;

    void loop() {
    void polycsms();
    }


    void polycsms()
    {
    if (!gprsSerial.available())
    return;


    char currSymb = gprsSerial.read();
    if ('\r' == currSymb) {
    if (isStringMessage) {
    /
    /если текущая строка - SMS-сообщение,
    //отреагируем на него соответствующим образом
    if (!currStr.compareTo("Hello ")) {
    void otpravkasms();
    }
    }
    }
    }


    void otpravkasms() {
    // Устанавливает текстовый режим для SMS-сообщений
    gprsSerial.print("AT+CMGF=1\r");
    // Устанавливаем адресата
    gprsSerial.println("AT + CMGS = \"+xxx\"");
    gprsSerial.println("Hello");
    /
    / обозначaeет, что сообщение готово

    gprsSerial.println((char)26);
     
  2. Unixon

    Unixon Оракул Модератор

    А где сравнение входящего номера с номерами из "белого" списка?
     
  3. Vovka41

    Vovka41 Нерд

    В том то и дело, что его нет, а как сделать не знаю, знаю, что есть команда AT+CLCC -узнать номер, но она работает только при звонках. Сейчас получается, что любой может отправить смс на арди и он на него ответит
     
  4. lerik2703

    lerik2703 Гик

  5. Vovka41

    Vovka41 Нерд

    Может быть. Просто я пока её ни разу не использовал, да и не знаю как, примеры из архива всё равно выдают ошибки на версии 1.0.5 . А разве она как-то поможет решить мою проблему?
     
  6. lerik2703

    lerik2703 Гик

    да там есть пример для работы смс GSM_GPRSLibrary_SMS! и функция gsm.readSMS возвращает номер телефона и текст сообщения!
     
  7. Vovka41

    Vovka41 Нерд

    Что-то ему не нравится. А эта библ. на версию 1.0. 5 работает?
     

    Вложения:

  8. lerik2703

    lerik2703 Гик

    у вас библиотека не подключилась!GSM_GPRS_GPS у вас такое имя папки ?
     
  9. Vovka41

    Vovka41 Нерд

    А всё, теперь всё получилось, спасибо. Только вот что дальше. Я с ней никогда ранее не работал, поэтому не знаю, с чего начать..(
     

    Вложения:

  10. Vovka41

    Vovka41 Нерд

    Скажите, а вот это получается и есть та команда на проверку телефона или нет?
     

    Вложения:

  11. lerik2703

    lerik2703 Гик

    это уже отправка сообщения !
     
  12. Vovka41

    Vovka41 Нерд

    А тогда получается, что это проверка? Если да, не могли бы мне помочь её расшифровать?

    (int numdata;
    boolean started=false;
    char smsbuffer[160];
    char n[20]; )
     

    Вложения:

  13. lerik2703

    lerik2703 Гик

    started в данном случае это флаг разрешения отправки и получения сообщения (не обращаем на него внимания он для команды AT-CPIN )! smsbuffer буфер для входящего сообщения !n номер телефона! загрузите пример в ардуинку и просто Serial мониторе посмотрите что будет!:)
     
    Последнее редактирование: 15 фев 2014
  14. Vovka41

    Vovka41 Нерд

    Что-то он какой-то не общительный=). Скажите, а если n- номер телефона, то что тогда такое char n[20].
    и чему оно равно?
     

    Вложения:

  15. lerik2703

    lerik2703 Гик

    ответа от модуля нет прорвете подключение! har n[20]. это буфер для номера телефона поступившего сообщения !
     
    Последнее редактирование: 15 фев 2014
  16. Vovka41

    Vovka41 Нерд

    Да, вытащил, поставил снова, всё работает). Скажите, то есть получается что эта n принимает значение входящего номера?
    Если да, то можно каким-то чудесно- магическим способом создать так называемый список номеров, на которые арди будет отвечать а остальные игнорить?
     
  17. lerik2703

    lerik2703 Гик

    а табличку упаковать :) и цикле перебрать!
     
  18. Vovka41

    Vovka41 Нерд

    кстати, а почему именно
    char smsbuffer[160];
    char n[20];
    а не другие цифры?

    И вот наверное последний вопрос про эту таблицу, то есть мне в ней нужно этой самой n присвоить номера необходимых сотовых, а потом сравнить, совпадают ли они с тем, от которого пришло смс, если так, как её составить, не могли бы вы помочь, очень хотелось разобраться, а помогаете мне только вы один, за что вам огромное спасибо):)
     
  19. lerik2703

    lerik2703 Гик

    160 это буфер одного соотношения написанного латинским алфавитом !ну а n 20 это уже было на усмотрение автора ля международных номеров где код страны города....
     
  20. lerik2703

    lerik2703 Гик

    вечером накидаю пример!