Здравствуйте! Пытаюсь заставить Arduino взаимодействовать с GPRS Shield. Возникли вопросы. 1. Как вы обычно проверяете включен ли шилд? Это нужно, чтобы нечаянно его не выключить, подавая питание на 9-й контакт. Есть ли какие "железные" способы? На данный момент использую проверку Код (Text): if (GPRS.available() == 0){ } но оно может выполняться и при включенном шилде. Поэтому приходится перед этим отправлять "AT", что приводит к следующему вопросу. 2. Как можно прочитать ответ только одной AT команды? Видимо я чего-то не понимаю, поскольку в массив лезут и предыдущие. Т.о. вместе с ответом на "AT+CCLK?" я вижу и ответ на тестовую команду, если шилд оказывается включен на момент проверки.
1) "Железный" способ есть, но сигнал состояния не выведен на пины ардуины. 2) Первый ответ на "AT" перед отправкой второй команды "AT+CCLK?" вы разве не считываете?
Я решил этот вопрос так. Сделал функцию тупого включения шилда через девятую ногу и вызываю ее в сетапе. Код (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(); // Восстанавливаем режим приема СМС; } Таки образом, если шилд включен, а мы перезаписав программу, или нажав кнопку сброса его выключим при сетапе, при первой же проверке информации из него шилд будет включен. Не подводило не разу.
Есть вариант перед включением просто послать на шилд команду AT. Если через несколько секунд все еще нет OK, значит надо включить.
Нет, не считываю. Я посылаю AT только для создания необходимых для проверки телодвижений, почти как уже сказал выше geher. Т.е. мне не важно, что ответил шилд, главное он ответил. Видимо придется после этого еще и обнулять буфер просто. А подробнее про "железный" способ? Могу я его сам вывести? И еще. Как обычно считывают ответы команд? Читают каждый символ и в массив, а потом разбирают?
Как работает команда "AT+CCLK?" Просто запрашивает аппаратное время у шилда? Иль "лезет" в GSM-сеть за ним?