Проблемы пользования RTC из SIM900

Densoider
Offline
Зарегистрирован: 02.11.2012

Приветствую,

Бьюсь как рыба. Помогите разобраться.

После того как я обнаружил, что имеющийся у меня RTC 1307 врет на 10 минут в час, задался вопросом - зачем мне внешний RTC если в самом шилде SIM900 уже он есть. И решил его задействовать. Но наткнулся на проблему работы с модулем посредством АТ команд.

Суть такая: в нужный мне момент (событие) происходит обращение к RTC посредством команды:

AT+CCLK?

в ответ модуль выдает

+CCLK: "15/05/07,17:51:53+12"

где +12 - это временная зона.

Задача - подать команду запроса времени, принять ответ, вычитать время и вставив его в СМС с описанием события, благополучно мне отправить.

Вот кусочки кода слепленные в скетч. Просто для понимания процесса.

Самое главное что процедуры запроса времени работает, а вот чтение времени и вставка в смс - нет. И я не могу понять почему.

Вообще работа со строками и "чтение" - не мой конек совсем. Помогите пожалуйста.

#include <SoftwareSerial.h>
SoftwareSerial SIM900(2, 3);
#define GPRS SIM900
// ВНИМАНИЕ!!! Настройки модуля пропущены! Но они есть!

#define BTN_PIN 10 //датчик на 10 pin
char RTC_time[20];

void setup()
{
	  GPRS.begin(9600);     // GSM SMS-передача плата GPRS
	  delay(2000);
	  get_Time();
	  startSMS();
	  GPRS.print("SmartHome ON - "); // дом включен
	  GPRS.println(RTC_time);// время включения
	  EndSMS();
          pinMode(BTN_PIN, INPUT); digitalWrite(BTN_PIN,HIGH);
}

void loop()
{
alarm_check();
}

void startSMS() 
	{
	      GPRS.print("AT+CMGF=1\r");
	      delay(300);
	      GPRS.println("AT + CMGS = \"+7111111111\""); 
	      delay(300);
	}     

void EndSMS() 
	{
	   delay(300);
	   GPRS.println((char)26);                       // Команда отправки СМС
	   delay(5000);
	}

void get_Time()
        {
          if (!GPRS.available()) return;
          GPRS.println( "AT+CCLK?" );
          delay (100);
          int i = 0;
          RTC_time[i]=GPRS.read();
          if (RTC_time[i]=='\n') {
          RTC_time[++i] = '\0';
          }
          i++;
        }
        
void alarm_check()
        {
         if(digitalRead(BTN_PIN)==LOW) {alarm_SMS();} // код просто для примера.
        }
void alarm_SMS()
	{
	    get_Time();
            startSMS();
            GPRS.print(RTC_time);
	    GPRS.print("Trevoga!: Srabotal datchik vorot!");
	    EndSMS();                                
        }

 

Densoider
Offline
Зарегистрирован: 02.11.2012