GPRS Shield v2.2

Нет ответов
layNiko
Offline
Зарегистрирован: 25.06.2015

Доброго всем времени суток. Выкладываю скетч приема СМС вышеуказанным девайсом. Суть скетча отреагировать на команду, полученную в СМС, в формате ХХХХХХХ YY (где X - текстовая команда, а Y - числовой параметр). Вот ссылка на сайт девайса. Родные библиотеки под SoftSerial. Библиотека которую использовал я - заточена под Serial1, что мне и надо было. Прошу сильно не пинать - в программировании на Cи я балбес, так что делалось с помощью неких, поверхностных, знаний других языков и Гугла )) Если кто подскажет как подпилить, чтоб небыло говнокодом, буду благодарен.

Фотка девайса:

 

Скетч:

/*
GPRS SMS Read

Данную команду необходимо отправить шилду: "AT+CNMI=3,0,0,0,0"
Библиотека здесь https://github.com/jestan/GPRS_SIM900
*/

#include <GPRS_Shield_Arduino.h>

#define MESSAGE_LENGTH 160
#define BAUNDRATE 19200
#define led 10

char message[MESSAGE_LENGTH];
char phone[16];
char datetime[24];

String parametr = "";
String tel = "";

int znachenie;
int messageIndex = 0;
int t_kotla_max = 40;


GPRS gprs(BAUNDRATE);


void setup() {
  Serial.begin(19200);
  Serial1.begin(19200);
  while(!gprs.init()) {
      Serial.print("init error\r\n");
      delay(1000);
  }
  delay(3000);  
  Serial.println("Init Success, please send SMS message to me!");
  pinMode(led, OUTPUT);
}

void loop() {
  read_sms();
}

void read_sms() {
   messageIndex = gprs.isSMSunread();
   if (messageIndex > 0) { //At least, there is one UNREAD SMS
      gprs.readSMS(messageIndex, message, MESSAGE_LENGTH, phone, datetime);           
      //In order not to full SIM Memory, is better to delete it
      gprs.deleteSMS(messageIndex);
      Serial.print("From number: ");
      Serial.println(phone);  
      Serial.print("Datetime: ");
      Serial.println(datetime);        
      Serial.print("Recieved Message: ");
      Serial.println(message);
      // ########## Разбираем по словам ################
      char *p;
      char *w1, *w2;
      w1 = strtok_r(message, " ", &p);
      w2 = strtok_r(NULL, " ", &p); // delimiter is the semicolon
      //##########################################################

      //########### Преобразуем из *char в String и int ##########
      tel = phone;
      parametr = w1;
      znachenie = atoi(w2);
      //##########################################################
      
      if (!tel.compareTo("+78880000000")) {
        if (!parametr.compareTo("KOTEL")) {digitalWrite(led, HIGH); t_kotla_max=znachenie;}
 
      }
   }
}