Доброго времени суток. Написал (ну как написал, где-то там, где-то тут, где-то сам) программу, типа "сигнализация". Arduino Mega 2560r3 + куча датчиков + neoway m590. Сам m590 такой: Не паял. В магазине продавался уже собранный, спаянный. Прога робит. Отсылает смс, при превышении установленных порогов датчиков; принимает команды "отключения/включения" геркона. Принимает по смс команды и адекватно реагирует (присылает: температуру, влажность, баланс на симке, обычный текст). При получении смс от меня выводит сообщение в монитор, мол получил от владельца. Проблема вот в чём, иногда он как будто впадает в ступор. Может работать 5, 10, 30 минут, может больше, а потом всё... В чём проявляется. Мои смс не детектит (в монитор не пишет), при отправке смс от сработавшего датчика пишет ERROR. Судя по монитору он ребутнуля (MODEM:STARTUP и +PBREADY). Сам при этом прозванивается, в мониторе RING есть. Подключил через uart, ждал час пока поймает ступор и напишет стартап и реди. Отправлял at+cmgs="+7нмер телефона". Ентер и ctrl+z, так же пишет ERROR (при первом подключении всё отсылал) 1) Почему не детектит мои смс, а при отправке пишет "ERROR", хотя до ступора работает нормально? 2) Можно его подопнуть (командами ребутнуть) если поймал ступор? P.S.: Извеняюсь за нубство(возможно), но сил моих больше нет
Код (C++): if (mySerial.available()) {Serial.println("-------------------Трассер начало"); //Если есть данные от GSM модуля comm=0;val="";delay(200);//Обнуляем переменную команд и строку val. Подождём, чтобы строка успела попасть в порт целиком раньше чем будет считана while (mySerial.available()) { //Cохраняем входную строку в переменную val soobshenie = mySerial.read(); //Читаем символы сообщения val += char(soobshenie); //Cобираем принятые символы в строку delay(10); }TimePrint();Serial.println(val);//ТРАССИРОВКА СООБЩЕНИЙ Serial.println("-------------------Трассер Конец"); if (val.indexOf("ERROR") > -1) {String valiferr=val;//Если модем сообщил ошибку, помещаем сообщение в временную переменную errmodem();//Функция перезагрузки модема val=valiferr; } } Т.е. в функции ребута модема errmoedm() (которая пока что пуста)? Думал копать в сторону Arduino и юзал ребут двумя способами, один из которых watchdog, но оба варианта не помогли. Можно подробнее, пожалуйста?
Зачем изобретать Велосипед?Когда есть наработки от очень хорошего и уважаемого на этом Форуме человека?
Благодарю за ответ. Видел, читал, дело в том, что у меня на m590 нету пина boot и как следствие не могу использовать функции включения/выключения. Плата немного другая (на видео как у меня, но не пойму откуда идут провода с модема и куда). У меня есть пины I, T, R, U, K,G, которые расписали на одном сайте как: I — При поступлении входящего вызова на линии появляются импульсы с низким логическим уровнем длительностью 30 мс T — TX R — RX U — + напряжение питания 3,3 – 4,5В K — Включение модуля при соединении с землей G — Земля Как там написано пины K и G замкнуты джампером, без этого не стартует. И ещё, по ссылке, в коде, ожидание включения - команда +PBREADY, которая у меня в мотниторе Arduino и отдельно в Terminal'е v1.9b показывалась после MODEM:STARTUP, но дело в том что модем как будто висит. Звонок идёт, AT команда идёт, но не отправка, не принятие смс не происходит. При отправке только ERROR.
Хотите сказать что K - это и есть boot? И тогда получается можно использовать код выше через пин K подключенный к arduino? Ладно, но тогда, даже если сбросить модем, он будет говорить MODEM:STARTUP и +PBREADY и так же не реагировать (т.к. отдельно отключал его питание и включал обратно, результат - 0)