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

Тема в разделе "Arduino & Shields", создана пользователем Alexium, 30 июл 2014.

  1. Alexium

    Alexium Нуб

    Здравствуйте! Пытаюсь заставить Arduino взаимодействовать с GPRS Shield. Возникли вопросы.

    1. Как вы обычно проверяете включен ли шилд? Это нужно, чтобы нечаянно его не выключить, подавая питание на 9-й контакт. Есть ли какие "железные" способы? На данный момент использую проверку
    Код (Text):
    if (GPRS.available() == 0){
    }
    но оно может выполняться и при включенном шилде. Поэтому приходится перед этим отправлять "AT", что приводит к следующему вопросу.

    2. Как можно прочитать ответ только одной AT команды? Видимо я чего-то не понимаю, поскольку в массив лезут и предыдущие. Т.о. вместе с ответом на "AT+CCLK?" я вижу и ответ на тестовую команду, если шилд оказывается включен на момент проверки.
     
  2. Unixon

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

    1) "Железный" способ есть, но сигнал состояния не выведен на пины ардуины.
    2) Первый ответ на "AT" перед отправкой второй команды "AT+CCLK?" вы разве не считываете?
     
  3. ИгорьК

    ИгорьК Гуру

    Я решил этот вопрос так. Сделал функцию тупого включения шилда через девятую ногу и вызываю ее в сетапе.
    Код (C):
    void CheckGPRS(void) {

    //      Serial.println("Now Write \"HIGH\" To Pin 9!");
                digitalWrite(9, HIGH);
                delay(1200);
    //            Serial.println("Now Write \"LOW\" To Pin 9!");
                digitalWrite(9, LOW);
                delay(5000);
    }
    По ходу программы периодически проверяю информацию, поступающую из шилда, на стринг "NORMAL POWER DOWN", который он выдает перед выключением:
    Код (C):
    if (!currStr.compareTo("NORMAL POWER DOWN")){ // При выключении GPRS по какми-то причинам (перезагрузка, например);
                CheckGPRS();              // Включаем;
                SetGPRSMode();            // Восстанавливаем режим приема СМС;
    }
    Таки образом, если шилд включен, а мы перезаписав программу, или нажав кнопку сброса его выключим при сетапе, при первой же проверке информации из него шилд будет включен.
    Не подводило не разу.
     
    Alexium нравится это.
  4. geher

    geher Гуру

    Есть вариант перед включением просто послать на шилд команду AT. Если через несколько секунд все еще нет OK, значит надо включить.
     
  5. Alexium

    Alexium Нуб

    Нет, не считываю. Я посылаю AT только для создания необходимых для проверки телодвижений, почти как уже сказал выше geher. Т.е. мне не важно, что ответил шилд, главное он ответил. Видимо придется после этого еще и обнулять буфер просто.

    А подробнее про "железный" способ? Могу я его сам вывести?

    И еще. Как обычно считывают ответы команд? Читают каждый символ и в массив, а потом разбирают?
     
  6. lerik2703

    lerik2703 Гик

    припаяться к выводу STATUS модуля SIM900 (66 пин) к нему подключен диод состояния!
     
    Alexium нравится это.
  7. Alexium

    Alexium Нуб

    Как работает команда "AT+CCLK?" Просто запрашивает аппаратное время у шилда? Иль "лезет" в GSM-сеть за ним?