GSM Shield SIM 900R от амперки -все вопросы сюда!

Тема в разделе "Arduino & Shields", создана пользователем НКВД, 30 янв 2016.

  1. [+]Festival

    [+]Festival Нуб

    gprs.ifSMSNow() работает нормально. Каждый раз, когда приходит SMS идет вызов функции gprs.readSMS. Сегодня попробовал использовать вариант этой функции типа bool в конструкции if(!gprs.readSMS(index, message, length)){Serial.println("Ошибка функции";)} возвращает faulse.
     
  2. Nekto_nikto

    Nekto_nikto Гик

    Попробуйте все таки как я писал через указатели параметры загонять, это перегруженная функция, у которой 2 варианта использования и в вашем случае должны в качестве параметров передаваться 3 указателя, но опять же вопрос, это должны быть указатели на нулевые элементы, или тупо указатели на массив, без номера элемента массива?
    https://github.com/amperka/gprs-shield/blob/master/GPRS_Shield_Arduino.h
    ctrl+F->"readSMS"
     
  3. a1000

    a1000 Гуру

    Смотрю на вышенаписанное и удивляюсь. Все GSM шилды управляются простыми АТ командами. Для чего-то создали библиотеку. На сегодняшний день разобраться с функциями библиотеки намного сложнее чем использовать АТ команды. А узнать где сбой это прям битва экстрасенсов. Реальные ответы шилда библиотека пользователю не выдаёт по сему приходится не имея кодов ошибок гадать на хрустальном шаре.
     
    Andrey12 нравится это.
  4. Nekto_nikto

    Nekto_nikto Гик

    Я в обсуждении участвую, потому что думаю что мне эта фича со временем может тоже понадобится.
    Про битву экстрасенсов не соглашусь, т.к. здесь речь идет не о скомпилированной библиотеке, а о простом .h/.C файле, где расписан сам код, который можно глянуть.
    А вообще если бегло глянуть файл, ссылку, на который я дал выше, можно прийти к выводу, что функция ifSMSNow() не самый удачный выбор, т.к. в данной библиотеке ее даже не описали толком и вместо нее лучше использовать isSMSunread(), которая точно не меняет статус СМС с непрочтенного, НО в то же время функция readSMS() после прочтения меняет статус СМС на прочитанное.
    И получается что когда приходит СМС, isSMSunread() определяет этот момент, а readSMS() читает смску и помечает ее как прочитанную.
     
  5. [+]Festival

    [+]Festival Нуб

    ifSMSNow() взята из примера на сайте амперки. Удивительно, но пример работает стабильно. Мой код в точности повторяет пример, но не работает. Если закомментировать все. кроме примера в моем коде, тоже все работает. Почему так, я не понимаю.
     
  6. Nekto_nikto

    Nekto_nikto Гик

    Выложите код примера, или ссылку
     
  7. [+]Festival

    [+]Festival Нуб

    Ссылка вот: http://wiki.amperka.ru/продукты:arduino-gprs-shield-v3
    там есть пример на чтение SMS.
    Но я разобрался, в чем дело. Нормальной работе функции мешала команда delay(30000), стоявшая в моем скрипте в основном цикле loop. Убрал и все заработало :)
     
  8. Airat

    Airat Нуб

    Доброго времени суток уважаемые форумчане. Вспомнил что несколько лет назад покупал gprs shield от амперки. Решил скоротать вечерок за изучением AT команд ну и вспомнить немного что в детстве радиолюбителем был) Взял скетч для управления ат командами через монитор, с сайта амперки. Посидел... попробовал позвонить... все норм. Отправил сообщение программно... все норм. Начал отправлять через монитор...Ну и тут проблемы у меня. Пишу
    AT+CMGF=1
    AT+CMGS="+7xxxxxxxxxxx"
    > сообщение
    и не знаю как отправить терминатор Ctrl+Z. Попробовал много вариантов, перечислять устанешь. Отправить в конце концов удалось, но с костылями. Решение было такое, сделал скетч, который в монитор отправит Serial.wryte(26); полученное квадратик скопировал в текстовый документ и после сообщения просто добавляю его . Вопрос... подскажите пожалуйста, как по клаве набрать Ctrl+Z, чтоб закончить сообщение через монитор порта.
     
  9. parovoZZ

    parovoZZ Гуру

    Так в терминальных программах есть настройки, которые позволяют вставлять символы окончания строки и перевода каретки автоматически.
     
  10. SergeiL

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

    Вопрос не про CR+LF а про CTRL+Z

    @Airat Используйте не монитор порта а другую терминальную программу типа PuTTY или Termpro
     
  11. DetSimen

    DetSimen Гуру

    Serial.print('\x1A'); // отправит CTRL+Z в Serial
     
  12. SergeiL

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

    Это да, но тогда нужен какой то символ, чтобы по его получению от монитора порта выполнить эту команду.
     
  13. DetSimen

    DetSimen Гуру

    Нуууу... Я новичок, я не разбираюсь. :)
     
  14. SergeiL

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

    Да я к тому, что нужно жертвовать каким то символом типа ~
    Я бы так и сделал, и не парился, но спросивший "скачал" код с Амперки.
     
    DetSimen нравится это.
  15. Рокки1945

    Рокки1945 Гуру

    не лучше амперсанд "&" - Амперка форум же
     
  16. Airbus

    Airbus Радиохулиган Модератор

    Я делаю так
    Код (Text):
    // Отправляем Ctrl+Z, обозначая, что сообщение готово
        Serial.print((char)26);
     
    a1000 нравится это.
  17. a1000

    a1000 Гуру

    Ну да, всю жизнь так делали.
     
    DetSimen нравится это.
  18. Airat

    Airat Нуб

    Наверное так и поступим, спасибо.
     
  19. Airat

    Airat Нуб

    Подскажите пожалуйста. Во время звонка, GPRS shield отправляет в порт строку RING и номер звонящего. Как можно (без использования библиотеки) при поступлении строки RING допустим, запустить определённую функцию. Я пробовал сохранить входящие данные с Шилда в массив, в строку. Ну ничего кроме непонятных иероглифов сохранить не удалось. Укажите тропинку, покажите кусочек кода как можно сохранить и сравнить в дальнейшем эту строку. Или советом. Все это в целях саморазвития.
     
  20. Airbus

    Airbus Радиохулиган Модератор

    Много разных способов есть. Один из них в ВИКИ Амперки