Делаю совой "умный дом". На данном этапе обкатываю общение "умного дома" и Андроид телефона посредством обмена СМСками. Во многих местах скетча приходится вставлять код типа: Код (C++): Serial2.println("AT+CMGS= \"+7926ххххххх\""); delay(100); Serial2.println("MEGA 2560 test"); delay(100); Serial2.println((char)26); понятно, что это не рационально. А хотелось бы этот кусок кода засунуть в отдельную процедуру. 1.Однако тогда нужно вместо "MEssage message" использовать строковую переменную. Вот тут у меня и загвоздка. Не могу разобраться со строками. Везде описывают строки типа char[], причем очень лаконично и везде один и тот же пример. 2. Было бы также очень хорошо "AT+CMGS= \"+7926ххххххх\"" тоже прописать глобальной константой, чтобы потом было удобно менять номер телефона. Подскажите пожалуйста как это сделать или где почитать.
Строка это массив элементов типа char, заканчивпющийся нулем. Внутрь можно вставлять что угодно и как угодно.
Стрингами я тоже пытался баловаться. Только проблема моя была в том, что я в объявлении переменной string писал с маленькой буквы и IDE это не хавал.
Усложняем помаленьку код и получаем вот что: Код (C++): void sms_receive() //процедура получения и обработки смс { str_message = ""; while (Serial2.available()) { delay(30); currSymb = Serial2.read(); currStr = currStr + String(currSymb); } if (currStr != "") { //смс начинается с 50 индекса for (i = 50; i < (currStr.length()-2); i++) str_message += currStr.charAt(i); currStr = ""; } if (str_message != "") str_message_print(); if (str_message == "g 1") { i_clock[7] = 1; poliv_start(); } if (str_message == "g 2") { i_clock[7] = 2; poliv_start(); } } В эту подпрограмму я попадаю из строки: if (Serial2.available()) sms_receive(); Все вроде было хорошо. Однако через некоторое время (или через какое-то количество принятых СМС). Модуль перестает откликаться на СМСки, хотя их вроде получает (если смотреть через монитор порта). Модуль SIM800L подключен через аппаратный Serial2 платы Mega2560. Возникают несколько вопросов на которые у меня пока нет конкретных ответов. 1. Жизнеспособный ли код представленный выше? Можно конечно скопипастить код отсюда например https://istarik.ru/blog/arduino/17.html но я в нем пока не могу разобраться. 2. Может переполняется память хранения СМС в модуле и из-за этого возникает моя проблема. Но тогда наверно нужно ее (память почистить) например вот так Serial2.print("AT+CMGDA=\"DEL ALL\"\r"); однако это я тоже пробовал - не помогает. Посоветуйте кто сможет.