Если зависает только шильд - Ардуина должна выводить сообщение об ошибке инициализации шильда. Получается у вас и Ардуина зависает ?
Тогда это делается вставлянием перед каждым этапом работы кода - команды вывода сообщения в монитор. Типа - Serial.println("делаю то-то"); И так вычисление конкретной сбоящей функции методом "исключения - погружения в глубь кода". Порой приходится внутри библиотек вставлять, пока найдешь конкретную не работающую операцию. Я вам писал - монтаж железа - это оч. малая часть возможной е*ни с отладкой кода.
так есть такие команды Код (C++): // включаем GPRS шилд gprs.powerOn(); // проверяем есть ли связь с GPRS устройством while (!gprs.init()) { // если связи нет, ждём 1 секунду // и выводим сообщение об ошибке // процесс повторяется в цикле // пока не появится ответ от GPRS устройства delay(1000); Serial.print("GPRS Init error\r\n"); } // вывод об удачной инициализации GPRS Shield Serial.println("GPRS init success"); delay(3000); при первой передаче в мониторе все видно...а вот последующая... по логике, то что шилд включился (после 5минутного таймаута) и инициализировался, слышно по шумам в акустике (идет инициализация в сотовой сети), а в мониторе тишина. может я както не правильно монитором порта пользуюсь?
1. Команда gprs.init() - это не заклинание. В библиотеке - это функция, состоящая из 7-ми (точно не скажу - я щас на чужом компе сижу) отдельных АТ-комманд. На какой код зависает - это и есть погружение вглубь. 2. По логике вещей - каждое включение шильда - для него ПЕРВОЕ, поскольку он не может помнить - что его только что выключили. А коль со "второго включения" он не работает - значит он не был выключен по-настоящему. Надо бы проверить - пропадает ли питание "до нуля" на SIM900- й во время паузы 5 мин. ПС. Короче говоря - вам попалась задачка для профессионального электронщика-программиста.
Ну Вики же не может предусмотреть, например, глюки (mal-functions) шильда. К тому же одноименных библиотек существует туева хуча. И не все они работоспособны. ПС. Если у вас есть комплект проводков с коннекторами (такие на Али продаются для макетирования) - подключите шильд к Ардуине через проводки. В Ардуинных магазинах они всегда в наличии, но ессно Вам не отщиплют пяток, а предложат купить комплект. Вам нужны 6-7 проводков. Когда шильд успешно отработает первый цикл и уйдет на 5мин паузу - отключите на 10 сек его питание с Vin. Не выключая Ардуины ессно. И включите снова. По окончании 5 минут - смотрите что будет дальше. Отпишитесь. ППС. Повредиться шильд не может. Но в любом случае - я не виноват. ))) Логический анализатор обычно находится между ушей. ))))
Вот исполняемый код команды gprs.init() Спойлер bool GPRS::init(void) { if (!sim900_check_with_cmd("AT\r\n","OK\r\n",CMD)) return false; if (!sim900_check_with_cmd("AT+CFUN=1\r\n","OK\r\n",CMD)) return false; if (!checkSIMStatus()) return false; if (!sim900_check_with_cmd("AT+CNMI?\r\n", "+CNMI: 2,2,0,0,0\r\nOK\r\n", CMD)) { if (!sim900_check_with_cmd("AT+CNMI=2,2,0,0,0\r\n","OK\r\n", CMD)) { return false; } } if (!sim900_check_with_cmd("AT+CMGF?\r\n", "+CMGF: 1\r\nOK\r\n", CMD)) { if (!sim900_check_with_cmd("AT+CMGF=1\r\n","OK\r\n", CMD)) { return false; } } if (!sim900_check_with_cmd("AT+CLIP=1\r\n","OK\r\n", CMD)) { return false; } return true; } Он состоит из 6-ти проверок. Причем две из них имеют вложенную проверку. Вставьте перед каждой проверкой вывод на монитор - и смотрите где код зависнет. Примерно так - Спойлер bool GPRS::init(void) { Serial.println(Test on AT comand"); //Вот if (!sim900_check_with_cmd("AT\r\n","OK\r\n",CMD)) return false; Serial.println(Test on AT+CFUN=1 comand"); //Вот if (!sim900_check_with_cmd("AT+CFUN=1\r\n","OK\r\n",CMD)) return false; Serial.println(Test on ... ") // и тд И впредь везде делайте именно так. ПС. Прежде не забудьте сохранить оригиналы файлов, чтоб было куда "вернуться." !!!!!!! ППС. Кстати именно так устроена аппаратная само-проверка (POST) любого компа. Просто надо уметь ее увидеть.
интересный момент... если монитор оставить включёным или не открывать вообще (отключен от компа), зависает как описывал. НО если монитор закрыть и потом открыть...шилд оживает и передает данные. походу какаято завязка на монитор идет
я тоже начинающий... Поизучал её недели две, понял, что шляпа какая-то и больше мне она не интересна.
Я так и думал. Могу посоветовать для начала только закомментировать эти 2 строчки - // if (!sim900_check_with_cmd("AT+CFUN=1\r\n","OK\r\n",CMD)) // return false; ПС. В симуляторной модели GPRS модуля - в перечне нет поддержки именно этой функции.