GPRS Shield v2.2
- Войдите на сайт для отправки комментариев
Чт, 02/07/2015 - 20:40
Доброго всем времени суток. Выкладываю скетч приема СМС вышеуказанным девайсом. Суть скетча отреагировать на команду, полученную в СМС, в формате ХХХХХХХ 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;} } } }