подключение GSM-shield-а к Меге через Serial

shura28
Offline
Зарегистрирован: 11.02.2014

дравствуйте!
Пытаюсь скрестить Мегу с gsm-shield-ом:


Подключаю через аппаратный Serial (вроде Serial1).
Библиотеку использую вот эту:
https://github.com/MarcoMartines/GSM-GPRS-GPS-Shield
потому как там можно без проблем использовать аппаратные порты Меги.
И вроде все работает, но:
все примеры из либы имеют вот такой код в setup():

     if (gsm.begin(2400)) {
          Serial.println("\nstatus=READY");
          started=true;
     } else Serial.println("\nstatus=IDLE");

     if(started) {
          //Enable this two lines if you want to send an SMS.
          //if (sms.SendSMS("3471234567", "Arduino SMS"))
          //Serial.println("\nSMS sent OK");
     }

который подразумевает, что функция gsm.begin включит и настроит модуль на "нужную волну".
Однако беда заключается в том, что этот begin ничего не включает! Можно конечно перед ним вставить код который будет дергать ногой GSM_ON, но это не правильно (при перезагрузке Меги этот код будет выключать gsm-модуль).
Покопавшись в коде библиотеки выяснил, что в самом начале функции gsm.begin, в порт, к которому подключен gsm-модуль, посылается команда "AT". Если ответа не приходит, то функция дергает GSM_ON и включает gsm-модуль. Вот этот код:
 

     for (cont=0; cont<3; cont++) {
          if ((AT_RESP_ERR_NO_RESP == SendATCmdWaitResp(str_at, 500, 100, str_ok, 5)) && !turnedON) {		//check power
               // there is no response => turn on the module
#ifdef DEBUG_ON
               Serial.println(F("DB:NO RESP"));
#endif
               // generate turn on pulse
               digitalWrite(GSM_ON, HIGH);
               delay(1200);
               digitalWrite(GSM_ON, LOW);
               delay(10000);
               WaitResp(1000, 1000);
          } else {
#ifdef DEBUG_ON
               Serial.println(F("DB:ELSE"));
#endif
               WaitResp(1000, 1000);
          }
     }

Однако во внутрь if {} Мега никогда не попадает, потому как на отправленное в порт "AT", мы получаем его (AT) обратно в любом случае (даже если gsm-shield выключен). Видимо к нам возвращается эхо.

Собственно вопросы к знатокам:
1. Кто возвращает эхо, UART Меги ? Его (эхо) можно как-то отключить ?
2. Если использовать SoftwareSerial, эха видимо не будет ?
3. Как лучше (красиво) обойти этот момент ?

p.s.: каюсь заранее, что не умею пользовться гуглом.

shura28
Offline
Зарегистрирован: 11.02.2014

Решил поэкспериментировать...
Если отключить gsm-модуль от меги и просто отправить набор символов в Serial1, то в ответ ничего не приходит. Т.о. проблема не в Меговском UART-е.
Если к Serial1 подключить gsm-модуль, но сам модeль не включать, то любой отправленный в Serial1 символ возвращается обратно как эхо. Такое ощущение, что в gsm-модуле порисходит замыкание rx на tx.

Так и должно быть ?