Я вначале писал: "у меня Arduino nano v3 (ATmega168), поэтому как ни крути а все не вместишь в него. Для моих нужд самое то, тем более цена вопроса в итоге проучается около 300р. За эти деньги ничего похожего не купишь.
можно немного уменьшить место для переменных оптимизировать под нужды например
Да не обращай внимания на подобные реплики, я же говорю, человек попутал раздел форума, зашел в "проекты" со словами - "купить". Продолжай развивать свою сигнализацию.
Я вначале писал: "у меня Arduino nano v3 (ATmega168), поэтому как ни крути а все не вместишь в него. Для моих нужд самое то, тем более цена вопроса в итоге проучается около 300р. За эти деньги ничего похожего не купишь.
не важно за какие деньги. Свои знания тоже стоят денег, и хорошие знания - больше чем стоимость китайской или другой сигнализации, так что думаю вы не правы считая 300 рублей. Кстати там аккумулятор еще нужен, зарядник для аккума и т.д. датчики на 12В нужны, а не те, что на али копеечные они не охранные. Это все нааамного дороже мифических 300 рублей.
Ну и в код для надежности, чтобы модуль не зависал каждые 2-3 суток ии чаще, нужно ввести подобное:
//********* КОНТРОЛЬ НАЛИЧИЯ РЕГИСТРАЦИИ В GSM СЕТИ *************
{
if (millis() - timer2 > 180000) // если уже прошло 3 мин, то начинаем проверку:
{ timer2 = millis();
{
gsm.println("AT+CREG?"); delay(50);
gsmRead (); // читаем ответ
Serial.println(val); delay(50); //печатаем в монитор порта пришедшую строку
if (val.indexOf("+CREG: 0,0") > -1) // если ответ что нет регистрации
{ modemOFF(); // то выключаем модем и все перегружаем
digitalWrite(pinBOOT, LOW);
delay(1000);
digitalWrite(pinBOOT, HIGH);
modemON ();
} val = "";
}
{
gsm.println("AT"); delay(50);
gsmRead (); // читаем ответ
Serial.println(val); delay(50); //печатаем в монитор порта пришедшую строку
if (val.indexOf("OK") > -1) // если ответ, что ОК, то брейк
{
}
else
{ Serial.println("reset gsm"); delay(50); //печатаем в монитор порта пришедшую строку
modemOFF(); // то выключаем модем и все перегружаем
digitalWrite(pinBOOT, LOW);
delay(1000);
digitalWrite(pinBOOT, HIGH);
modemON ();
}
}
}
val = "";
}
//**************конец контроля наличия регистрации в сети *****************
естественно дописать процедуры modemOFF(); и modemON(); а также чтение ответа от модуля - gsmRead ();
Значит вы не талкивались с реальными вещами, я пару десятков 590х в мусорку отправил, глючное или не работающее воовсе.
А код везде останавливается, а еще там гсм модуль который неизвестно как себя поведет, а еще там оператор оборудование которого также может нормальный модуль в ступор вводить и тогда нужно выключить питание гсм модуля а потом включить чтобы сделать новую регистрацию в сети.. По хорошему - на плату ставят ключ по питанию гсм модуля, код что я привел - это по большому счету полумера.
Значит вы не талкивались с реальными вещами, я пару десятков 590х в мусорку отправил, глючное или не работающее воовсе.
А код везде останавливается, а еще там гсм модуль который неизвестно как себя поведет, а еще там оператор оборудование которого также может нормальный модуль в ступор вводить и тогда нужно выключить питание гсм модуля а потом включить чтобы сделать новую регистрацию в сети.. По хорошему - на плату ставят ключ по питанию гсм модуля, код что я привел - это по большому счету полумера.
с модулем абослютно согласен) 590ые глючат, сам такю реализацию думаю сделать для перезагрузки модуля, но я имею ввиду сама дуина не замирает если все питание нормальное, без скачков и код оптимизирован что бы при ошибках разных датчиков могла выходит из положения а не просто в ступор вставать, надо просто заранее учитывать все и как может себя повести, например если мы считали с датчика что он активен, то нужно предусмотреть повторную проверку, или проверку раз 5 но точно будем уверены что можно выполнять иное действие. т.к. всякие помехи способны повлиять. я вот про что.
как я понимаю они разные бывают, с током потребления до 2х ампер, у меня более 100мА не потребляет и пока не глючил.
заблуждение. даташиты пробовали читать и вникать??
там все модули гсм потребляют около 2А !!! ВСЕ. и не пишите больше глупостей, читайте даташиты.
Потребление зависит от дальности до базово станции, потребление считается в импульсе, тестером не померяете. Поэтому ВСЕ! варианты питания нужно расчитывать а максимальное питание в импульсе до 2А.
Пробовал программки с постов 39 и45 . Становится и снимается с охраны. Дозвон при срабатывании датчика двери идет.
А с СМС -ми проблема не хочет слать вернее передача идет ( звук в динамиках компьютера) но на телефоны ни чего не приходит и с симки списания денег нет. Да и посмотрел деталлизацию на сим-ку отправлений нет.
Пробовал программки с постов 39 и45 . Становится и снимается с охраны. Дозвон при срабатывании датчика двери идет.
А с СМС -ми проблема не хочет слать вернее передача идет ( звук в динамиках компьютера) но на телефоны ни чего не приходит и с симки списания денег нет. Да и посмотрел деталлизацию на сим-ку отправлений нет.
всеж тянет вас на танцы с бубнами... а посмотреть что модуль отвечает на отправку смс ??? именно посмотреть, хоть терминалкой с отдельного порта. Вот там точно будет видно эрор лезет или ок и т.д..
всеж тянет вас на танцы с бубнами... а посмотреть что модуль отвечает на отправку смс ??? именно посмотреть, хоть терминалкой с отдельного порта. Вот там точно будет видно эрор лезет или ок и т.д..
C 30 поста отправка СМС проходит отлично.
Немного изменил код с поста №45
1. закоментировал отправку СМС при постановке и снятии охраны т.к. планирую светодиод вывести за дверь.
2. Отправка СМС идет только на один номер (постановка и снятие с двух) например:
#define SMSNUMBER "+7914697XXXX" // номер на который будем отправлять SMS
и увеличил время задержки перед отправкой СМС ( с 2 сек. после звонка СМС не приходило).
Да вообще-то и у меня пытался послать. Но сейчас из-за ненадобностью это уже удалил.
Сейчас появились другие вопросы. Решил приделать дисплейчик вывести на него напряжение аккамулятора и уровень сигнала.
Так вот вопрос
mySerial.println("AT+CSQ"); //вывести в терминал уровень сигнала
mySerial.println("AT+CSQ");
delay(100);
if (mySerial.available()) { //есть данные от GSM модуля
delay(200); //выждем, чтобы строка успела попасть в порт целиком раньше чем будет считана
while (mySerial.available()) { //сохраняем входную строку в переменную val
ch = mySerial.read();
val += char(ch);
delay(10);
}
Serial.println(val);
}
Как вывдернуть эту переменную.
А именно желательно разделить 28 и 0 т.к. это разные данные или хотя-бы вытянуть 28,0 в отдельную переменную. За одно по этим данным можно контролировать GSM модуль и если пропала связь перезагрузить модуль.
Да вообще-то и у меня пытался послать. Но сейчас из-за ненадобностью это уже удалил.
Сейчас появились другие вопросы. Решил приделать дисплейчик вывести на него напряжение аккамулятора и уровень сигнала.
Так вот вопрос
mySerial.println("AT+CSQ"); //вывести в терминал уровень сигнала
mySerial.println("AT+CSQ");
delay(100);
if (mySerial.available()) { //есть данные от GSM модуля
delay(200); //выждем, чтобы строка успела попасть в порт целиком раньше чем будет считана
while (mySerial.available()) { //сохраняем входную строку в переменную val
ch = mySerial.read();
val += char(ch);
delay(10);
}
Serial.println(val);
}
для начала вам нужно переписать кусок скетча для скорости обмена 9600 в порту:
mySerial.println("AT+CSQ");
delay(100);
if (mySerial.available()) { //есть данные от GSM модуля
delay(5); //выждем, чтобы строка успела попасть в порт целиком раньше чем будет считана
while (mySerial.available()) { //сохраняем входную строку в переменную val
ch = mySerial.read();
val += char(ch);
delay(1);
}
Serial.println(val);
}
или у вас она 512 вообще в порту?.. Именно такие задержки должны быть, и никакие другие, и ставьте 9600, и не срашивайте почему.
Скорость порта стоит 9600 . Сделал опрос уровня сигнала пока через 30 сек для проверки после можно увеличить . но пока ни черта не рабротает как надо
if (millis() - timer > 30000) // если уже прошло 30 СЕК, то начинаем проверку:
{timer = millis();
mySerial.println("AT+CSQ");
delay(100);
if (mySerial.available()) { //есть данные от GSM модуля
delay(5); //выждем, чтобы строка успела попасть в порт целиком раньше чем будет считана
while (mySerial.available()) { //сохраняем входную строку в переменную val
//mySerial.find("+CLIP: \""); // обрезаем номер до числового
ch = mySerial.read();
val += char(ch);
delay(1);
}
Serial.println(val);
}
}
На первый запрос приходит нормальный ответ на второй в сериале пишет певый и вторй ответ модуля в третьем уже 3 ответа итд.
И остался вопрос как вытащить числовую часть ответа.
проверяйте не все сразу, а послледовательно, начиная с терминалки и нужной ат команды. и
только когд все части работают по отдельности - собирать в кучу.
это чтобы потом не писать "не работает..." и ждать кто с бубнами будет вокруг вашего кода угадывать что там не так вы сделали.
Я и привожу не весь код , а только отрывок с которым не могу разобратся и прошу конкретного совета.
А не вашых упрёков. И вообще я смотрю вы засветились на всех ветках форума и не одного дельного совета.
Нужен пример : пожалуйста.
там кроме дтмф есть и другое.. ладно. наверное вы не в курсе.
Это одно ваше высказывание. Вот ещё . Нужно больше ? Про два ампера мы и в этой ветке слышали. На диоде падение относительно стабильно и сильно не зависит от тока. А диоды нужны для развязки питания от сети и от аккумулятора.
Зависимость между током протекающем через диод и падающем на нем напряжении нелинейная. Ток может увеличиться в несколько раз, падение напряжения на диоде увеличится всего на несколько десятых вольта.Падение напряжения на диодах мало зависит от тока в цепи.
Можно поставить диоды шотки и падение будет минимальное и практически не зависить от тока состалять 0,15-0,2 В.
Зависимость между током протекающем через диод и падающем на нем напряжении нелинейная. Ток может увеличиться в несколько раз, падение напряжения на диоде увеличится всего на несколько десятых вольта.Падение напряжения на диодах мало зависит от тока в цепи.
Можно поставить диоды шотки и падение будет минимальное и практически не зависить от тока состалять 0,15-0,2 В.
замечательо, вы уже на пол-пути к цели, вот вот и чтото начнете понимать.
ок.... возьмите в руки вольтметра, возьмите источник напряжения, и подключите анодом кремниевый диод и померяйте вольтметром на его катоде напряжение.... Сколько там? минус 0,7Вольт ?:) ха-ха.. как бы не так :)
так что упражняйтесь, учите матчасть.. учите.. может потом еще пообщаемся.
System Off;
Temp 24*C;
AT+CMGS="791*****"
Zhopa :((( смс отправилось! больше не отправлялось
OK
NEOWAY
M590
REVISION 01.30d
OK
OK
OK
OK
Ring: +79**********
System On;
Temp 24*C;
Zhopa :(((
OK
ERROR
Dver' otkrita!
System Off;
Temp 24*C;
Zhopa :(((
ERROR
System On;
Temp 24*C;
Zhopa :(((
ERROR
Появление сообщения "Zhopa :(((" означает, что Вам не хватает памяти для формирования новых объектов String. Просто элементарно не хватает памяти. Это точный диагноз, других причин быть не может. String - вообще убийца памяти.
Что с этим делать?
Вариант 1. Попробовать обойтись без String вовсе или свести их использование к минимуму.
Но если Вы обходиться без них не умеете, то
Вариант 2. хотя бы пройдитесь по программаме аккуратно и не храните лишнего в памяти. Не дублируйте тексты, вовремя освобождайте куски (фигурными скобками). Ну, вот например, Вы храните alarmPhone как массив символов. Затем Вы его же упихиваете в String, зачем?
Вот в этой теме есть конкретные примеры где и почему String убивает память, и приёмы управления памятью. Изучите. Также там есть библиотека при помощи которой Вы можете посмотреть состояние своей памяти в любой момент.
http://arduino.ru/forum/obshchii/neoway-m590#comment-267372 вот здесь пример как у меня получилось тоже немалого размера смс отправлять. Память нужно максимально освободить, у вас компилятор сколько пишет занято памяти? Проблемы начинались с 60-65%. После оптимизации записей вместо динамической памяти максимально перенес во флеш, у меня стало значение менее 25% ! и все отправлялось как положено.
можно немного уменьшить место для переменных оптимизировать под нужды например
009
int
flag1=0;
// флаг состояния датчика движения
010
int
guard = 0;
// Охрана: 1 - включена, 0 - выключена.
можно поменять на
009
byte
flag1=0;
// флаг состояния датчика движения
010
boolean
guard = 0;
// Охрана: 1 - включена, 0 - выключена.
Да не обращай внимания на подобные реплики, я же говорю, человек попутал раздел форума, зашел в "проекты" со словами - "купить". Продолжай развивать свою сигнализацию.
при чем тут слово - купить? что за манера приписывать другим свое мнение?? вы за себя отвечайте, я буду за себя.
не важно за какие деньги. Свои знания тоже стоят денег, и хорошие знания - больше чем стоимость китайской или другой сигнализации, так что думаю вы не правы считая 300 рублей. Кстати там аккумулятор еще нужен, зарядник для аккума и т.д. датчики на 12В нужны, а не те, что на али копеечные они не охранные. Это все нааамного дороже мифических 300 рублей.
Ну и в код для надежности, чтобы модуль не зависал каждые 2-3 суток ии чаще, нужно ввести подобное:
естественно дописать процедуры modemOFF(); и modemON(); а также чтение ответа от модуля - gsmRead ();
каждые 3 мин модуль будет быстренько отпрашиваться, если работает не так, потерял сеть или завис - перегружаем и работаем дальше.
ну и в таком духе желательно писать весь остальной код или еще лучше.
Спасибо, про проверку не подумал, да и чтоб ардуинка не зависла тоже надо дописывать.
сколько тестил дуину, если код нигде не останавливается то и дуина не зависала. рабоатет уже пол года без перерыва в машине
Значит вы не талкивались с реальными вещами, я пару десятков 590х в мусорку отправил, глючное или не работающее воовсе.
А код везде останавливается, а еще там гсм модуль который неизвестно как себя поведет, а еще там оператор оборудование которого также может нормальный модуль в ступор вводить и тогда нужно выключить питание гсм модуля а потом включить чтобы сделать новую регистрацию в сети.. По хорошему - на плату ставят ключ по питанию гсм модуля, код что я привел - это по большому счету полумера.
Значит вы не талкивались с реальными вещами, я пару десятков 590х в мусорку отправил, глючное или не работающее воовсе.
А код везде останавливается, а еще там гсм модуль который неизвестно как себя поведет, а еще там оператор оборудование которого также может нормальный модуль в ступор вводить и тогда нужно выключить питание гсм модуля а потом включить чтобы сделать новую регистрацию в сети.. По хорошему - на плату ставят ключ по питанию гсм модуля, код что я привел - это по большому счету полумера.
с модулем абослютно согласен) 590ые глючат, сам такю реализацию думаю сделать для перезагрузки модуля, но я имею ввиду сама дуина не замирает если все питание нормальное, без скачков и код оптимизирован что бы при ошибках разных датчиков могла выходит из положения а не просто в ступор вставать, надо просто заранее учитывать все и как может себя повести, например если мы считали с датчика что он активен, то нужно предусмотреть повторную проверку, или проверку раз 5 но точно будем уверены что можно выполнять иное действие. т.к. всякие помехи способны повлиять. я вот про что.
зависщий проц перезапустит вочдог.. там особо парится нет резона, вот питать его правильно - это нужно чтобы не вис и т.д.
590ые глючат ? это правда? можно их покупать или нет?
как я понимаю они разные бывают, с током потребления до 2х ампер, у меня более 100мА не потребляет и пока не глючил.
Мой экземпляр максимум 70 мА.
пришел датчик температуры dht22, хочу прикрутить при превышении 50*С (пожар), ну и просто контроль температуры
dht22 весьма относительный датчик я на температуру везде ставлю даллас ds18b20.
заблуждение. даташиты пробовали читать и вникать??
там все модули гсм потребляют около 2А !!! ВСЕ. и не пишите больше глупостей, читайте даташиты.
Потребление зависит от дальности до базово станции, потребление считается в импульсе, тестером не померяете. Поэтому ВСЕ! варианты питания нужно расчитывать а максимальное питание в импульсе до 2А.
Точка.
согласен, но его пока нет.
Пробовал программки с постов 39 и45 . Становится и снимается с охраны. Дозвон при срабатывании датчика двери идет.
А с СМС -ми проблема не хочет слать вернее передача идет ( звук в динамиках компьютера) но на телефоны ни чего не приходит и с симки списания денег нет. Да и посмотрел деталлизацию на сим-ку отправлений нет.
попробуйте из 30 поста, должно работать, лично все проверял. у меня на работе очень плохой сигнал сети мтс, звонит, смс не отправляет. теле2 работает
С 30 поста работает . Буду разбиратся .
а при включении тоже нет смс?
С 30 поста все идут , а 39 и 45 ни одной нет.
а номер правильно забит? 79.....?
да. дозвон идет.
странно. ничего не меняли в программе? я все проверял не один раз - работало!
сейчас пришла ардуина на 328 меге, и собираюсь допиливать прогу под себя другую (которая с начала темы).
Пробовал программки с постов 39 и45 . Становится и снимается с охраны. Дозвон при срабатывании датчика двери идет.
А с СМС -ми проблема не хочет слать вернее передача идет ( звук в динамиках компьютера) но на телефоны ни чего не приходит и с симки списания денег нет. Да и посмотрел деталлизацию на сим-ку отправлений нет.
всеж тянет вас на танцы с бубнами... а посмотреть что модуль отвечает на отправку смс ??? именно посмотреть, хоть терминалкой с отдельного порта. Вот там точно будет видно эрор лезет или ок и т.д..
Жду продолжения на 328
пока не ладится, т.к. купил не подумав про мини.
запрограммировал через нано, но в мониторе порта тишина...
всеж тянет вас на танцы с бубнами... а посмотреть что модуль отвечает на отправку смс ??? именно посмотреть, хоть терминалкой с отдельного порта. Вот там точно будет видно эрор лезет или ок и т.д..
C 30 поста отправка СМС проходит отлично.
Немного изменил код с поста №45
1. закоментировал отправку СМС при постановке и снятии охраны т.к. планирую светодиод вывести за дверь.
2. Отправка СМС идет только на один номер (постановка и снятие с двух) например:
и увеличил время задержки перед отправкой СМС ( с 2 сек. после звонка СМС не приходило).
Пока работает всё нормально вечером буду смотреть дальше.
Отправку СМС в setup -е удалил она просто не будет работать т.к. не еще не выполнен void sms
у меня работает, при включении смс снято с охраны - хотя это бесполезная смс.
Да вообще-то и у меня пытался послать. Но сейчас из-за ненадобностью это уже удалил.
Сейчас появились другие вопросы. Решил приделать дисплейчик вывести на него напряжение аккамулятора и уровень сигнала.
Так вот вопрос
mySerial.println("AT+CSQ"); //вывести в терминал уровень сигнала
Как вывдернуть эту переменную.
А именно желательно разделить 28 и 0 т.к. это разные данные или хотя-бы вытянуть 28,0 в отдельную переменную. За одно по этим данным можно контролировать GSM модуль и если пропала связь перезагрузить модуль.
хм... это называется ДАТЧИК ДЫМА, и не выдумывайте непонятно что с датчиками газа.. там принцип совсем разный.
Да вообще-то и у меня пытался послать. Но сейчас из-за ненадобностью это уже удалил.
Сейчас появились другие вопросы. Решил приделать дисплейчик вывести на него напряжение аккамулятора и уровень сигнала.
Так вот вопрос
mySerial.println("AT+CSQ"); //вывести в терминал уровень сигнала
для начала вам нужно переписать кусок скетча для скорости обмена 9600 в порту:
или у вас она 512 вообще в порту?.. Именно такие задержки должны быть, и никакие другие, и ставьте 9600, и не срашивайте почему.
Скорость порта стоит 9600 . Сделал опрос уровня сигнала пока через 30 сек для проверки после можно увеличить . но пока ни черта не рабротает как надо
На первый запрос приходит нормальный ответ на второй в сериале пишет певый и вторй ответ модуля в третьем уже 3 ответа итд.
И остался вопрос как вытащить числовую часть ответа.
проверяйте не все сразу, а послледовательно, начиная с терминалки и нужной ат команды. и
только когд все части работают по отдельности - собирать в кучу.
это чтобы потом не писать "не работает..." и ждать кто с бубнами будет вокруг вашего кода угадывать что там не так вы сделали.
проверяйте не все сразу, а послледовательно, начиная с терминалки и нужной ат команды. и
только когд все части работают по отдельности - собирать в кучу.
это чтобы потом не писать "не работает..." и ждать кто с бубнами будет вокруг вашего кода угадывать что там не так вы сделали.
Я и привожу не весь код , а только отрывок с которым не могу разобратся и прошу конкретного совета.
А не вашых упрёков. И вообще я смотрю вы засветились на всех ветках форума и не одного дельного совета.
Нужен пример : пожалуйста.
там кроме дтмф есть и другое.. ладно. наверное вы не в курсе.
Это одно ваше высказывание. Вот ещё . Нужно больше ?
Про два ампера мы и в этой ветке слышали. На диоде падение относительно стабильно и сильно не зависит от тока. А диоды нужны для развязки питания от сети и от аккумулятора.
диоды разные бывают.. эт раз.. и падение кагбы от тока зависит, вы осцилограф пробовали?
ладно, подсоеините диод одним концом к плюс аккума и тестром померяйте напряжение на обеих концах диода.
будете и далее утверждать? учите матчасть - это уже упреки, а до того давал вам советы.
учите матчасть - это уже упреки
Гугл вам в помощь Первая ссылка на запрос в поисковике (Падение напряжения на диоде)
http://domasniyelektromaster.ru/tag/napryazhenie-na-diode/
Зависимость между током протекающем через диод и падающем на нем напряжении нелинейная. Ток может увеличиться в несколько раз, падение напряжения на диоде увеличится всего на несколько десятых вольта.Падение напряжения на диодах мало зависит от тока в цепи.
Можно поставить диоды шотки и падение будет минимальное и практически не зависить от тока состалять 0,15-0,2 В.
Я вернулся к программированию!
наткнулся на проблему отправки смс с несколькими переменными:
подскажите, длинное смс получается, разбивать на два смс не хотелось бы.
учите матчасть - это уже упреки
Гугл вам в помощь Первая ссылка на запрос в поисковике (Падение напряжения на диоде)
http://domasniyelektromaster.ru/tag/napryazhenie-na-diode/
Зависимость между током протекающем через диод и падающем на нем напряжении нелинейная. Ток может увеличиться в несколько раз, падение напряжения на диоде увеличится всего на несколько десятых вольта.Падение напряжения на диодах мало зависит от тока в цепи.
Можно поставить диоды шотки и падение будет минимальное и практически не зависить от тока состалять 0,15-0,2 В.
замечательо, вы уже на пол-пути к цели, вот вот и чтото начнете понимать.
ок.... возьмите в руки вольтметра, возьмите источник напряжения, и подключите анодом кремниевый диод и померяйте вольтметром на его катоде напряжение.... Сколько там? минус 0,7Вольт ?:) ха-ха.. как бы не так :)
так что упражняйтесь, учите матчасть.. учите.. может потом еще пообщаемся.
подскажите, длинное смс получается, разбивать на два смс не хотелось бы.
такую смс не отправляет, либо приходит пустое смс. но в монитор порта пишет, даже если одной строкой написать:
Ну, скетч-то покажете? Не огрызок, а нормальный в котором "приходит пустое смс. но в монитор порта пишет"? Или будем в "битву экстрасенсов играть?
код, немного не допилил еще. кстати если отправлять из сетапа то длинное отправляется смс.
190 строка смс не отправляется пишет ошибку.
монитор порта:
В строках 238-245 проверьте правильно ли формируются объекты String для этого сформируйте посылки заранее и проверьте всё ли с ними в порядке.
Как-то так. Покажите мне, что печатает.
И второе - вывод сериала копипастите сюда - не надо картинки, я на ней с большим трудом разбираю что написано.
если правильно понял, заменяю:
получается так:
Понятно.
Появление сообщения "Zhopa :(((" означает, что Вам не хватает памяти для формирования новых объектов String. Просто элементарно не хватает памяти. Это точный диагноз, других причин быть не может. String - вообще убийца памяти.
Что с этим делать?
Вариант 1. Попробовать обойтись без String вовсе или свести их использование к минимуму.
Но если Вы обходиться без них не умеете, то
Вариант 2. хотя бы пройдитесь по программаме аккуратно и не храните лишнего в памяти. Не дублируйте тексты, вовремя освобождайте куски (фигурными скобками). Ну, вот например, Вы храните alarmPhone как массив символов. Затем Вы его же упихиваете в String, зачем?
Вот в этой теме есть конкретные примеры где и почему String убивает память, и приёмы управления памятью. Изучите. Также там есть библиотека при помощи которой Вы можете посмотреть состояние своей памяти в любой момент.
спасибо, почитаю.
спасибо, почитаю.
http://arduino.ru/forum/obshchii/neoway-m590#comment-267372 вот здесь пример как у меня получилось тоже немалого размера смс отправлять. Память нужно максимально освободить, у вас компилятор сколько пишет занято памяти? Проблемы начинались с 60-65%. После оптимизации записей вместо динамической памяти максимально перенес во флеш, у меня стало значение менее 25% ! и все отправлялось как положено.
у меня 59-60% занято