Добрый день! помогите понять, что за прикол... короткие смс отправляются без проблем, а вот с длинными проблема... в кратце о скетче: смс розетка с различными режимами работаты... начальная настройка модуля Код (C++): //настройка М590 gsm.begin(9600); //gsm.begin(19200); delay(200); gsm.println("AT+IPR=9600");delay(200);gsm.begin(38400);delay(200); gsm.println("AT+IPR=9600");delay(200);gsm.begin(57600);delay(200); gsm.println("AT+IPR=9600");delay(200);gsm.begin(74880);delay(200); gsm.println("AT+IPR=9600");delay(200);gsm.begin(115200); delay(200);gsm.println("AT+IPR=9600");delay(200); delay(200); gsm.println("AT+CSQ"); //вывести в терминал уровень сигнала (если 99, то связи нет) delay(200); gsm.println("AT+CMGD=0,3"); delay(200); gsm.println("AT+CLIP=1"); //включаем АОН delay(200); gsm.println("AT+CMGF=1"); //режим кодировки СМС - обычный (для англ.) delay(200); gsm.println("AT+CSCS=\"GSM\""); //режим кодировки текста delay(200); gsm.println("AT+CNMI=2,2"); delay(200); функция отправки смс: Код (C++): void smssend(String text, String phone) { //процедура отправки СМС Serial.println("SMS send started"); gsm.println("AT+CMGS=\"" + phone + "\""); delay(500); gsm.print(text); delay(500); gsm.print((char)26); delay(5000); /* val1 = ""; пытался сделать так, чтоб ардуина ждала ответа "ОК" от модуля и продолжала работу, но что то не сложилось.... do { while (gsm.available()) { ch = gsm.read(); val1 += char(ch); delay(10);} } while (val1.indexOf("OK") < 0); Serial.println(val1); val1 = "";*/ Serial.println("SMS send complete"); } и формирование самого сообщения: прибавляем к строке, отправленной потом в модуль, кусок текста с поятоянной проверкой на длину сообщения. и если длина сообщения достигает указанного предела, сообщение отправляется, строка обнуляется и опять начинает заполнятся для следующей смски. опять же с проверкой на кол-во символов Код (C++): void FullStatus() { sms = ""; for(int i = 0; i <= numPins -1; i++) { val3 = "R"; val3 += (i+1); switch (relayMode[i]) { case 1:{ val3 += " manual "; if ((sms.length() + val3.length()) <= 130) {sms += val3; val3=""; } if ((sms.length() + val3.length()) > 130) { Serial.println(sms); smssend(sms, String("+79161112219")); sms = ""; sms += val3; val3=""; } if (PinStatus[i]==ON) {val3 += "ON"; val3 +='\n';} else {val3 += "OFF"; val3 +='\n';} if ((sms.length() + val3.length()) <= 130) {sms += val3; val3=""; } if ((sms.length() + val3.length()) > 130) { Serial.println(sms); smssend(sms, String("+79161112219")); sms = ""; sms += val3; val3=""; } } break; case 2:{ val3 += " heat "; if ((sms.length() + val3.length()) <= 130) {sms += val3; val3=""; } if ((sms.length() + val3.length()) > 130) { Serial.println(sms); smssend(sms, String("+79161112219")); sms = ""; sms += val3; val3=""; } val3 += ttarget1[i]; val3 += " "; val3 += ttarget2[i]; val3 +='\n'; if ((sms.length() + val3.length()) <= 130) {sms += val3; val3=""; } if ((sms.length() + val3.length()) > 130) { Serial.println(sms); smssend(sms, String("+79161112219")); sms = ""; sms += val3; val3=""; } } break; case 3:{ val3 += " cool "; if ((sms.length() + val3.length()) <= 130) {sms += val3; val3=""; } if ((sms.length() + val3.length()) > 130) { Serial.println(sms); smssend(sms, String("+79161112219")); sms = ""; sms += val3; val3=""; } val3 += ttarget1[i]; val3 += " "; val3 += ttarget2[i]; val3 +='\n'; if ((sms.length() + val3.length()) <= 130) {sms += val3; val3=""; } if ((sms.length() + val3.length()) > 130) { Serial.println(sms); smssend(sms, String("+79161112219")); sms = ""; sms += val3; val3=""; } } break; case 4:{ val3 += " sign" ; if ((sms.length() + val3.length()) <= 130) {sms += val3; val3=""; } if ((sms.length() + val3.length()) > 130) { Serial.println(sms); smssend(sms, String("+79161112219")); sms = ""; sms += val3; val3=""; } val3 += "Ch"; val3 += signin[i]; val3 += " Lvl"; val3 += signlvl[i]; val3 +='\n'; if ((sms.length() + val3.length()) <= 130) {sms += val3; val3=""; } if ((sms.length() + val3.length()) > 130) { Serial.println(sms); smssend(sms, String("+79161112219")); sms = ""; sms += val3; val3=""; } } break; case 5:{ val3 += " time\n"; if ((sms.length() + val3.length()) <= 130) {sms += val3; val3=""; } if ((sms.length() + val3.length()) > 130) { Serial.println(sms); smssend(sms, String("+79161112219")); sms = ""; sms += val3; val3=""; } val3 += "Int1"; for (int n = 0; n <= 6; n++) { if (dayon1[i][n] == true) val3 += "+"; else val3 += "-"; } val3 += " on "; val3 += h1on[i]; val3 += ":"; val3 += m1on[i]; val3 += " off "; val3 += h1off[i]; val3 += ":"; val3 += m1off[i]; if ((sms.length() + val3.length()) <= 130) {sms += val3; val3=""; } if ((sms.length() + val3.length()) > 130) { Serial.println(sms); smssend(sms, String("+79161112219")); sms = ""; sms += val3; val3=""; } val3 += "\nInt2"; for (int n = 0; n <= 6; n++) { if (dayon2[i][n] == true) val3 += "+"; else val3 += "-"; } val3 += " on "; val3 += h2on[i]; val3 += ":"; val3 += m2on[i]; val3 += " off "; val3 += h2off[i]; val3 += ":"; val3 += m2off[i]; val3 +='\n'; if ((sms.length() + val3.length()) <= 130) {sms += val3; val3=""; } if ((sms.length() + val3.length()) > 130) { Serial.println(sms); smssend(sms, String("+79161112219")); sms = ""; sms += val3; val3=""; } } break; case 6:{ val3 += " timer "; if ((sms.length() + val3.length()) <= 130) {sms += val3; val3=""; } if ((sms.length() + val3.length()) > 130) { Serial.println(sms); smssend(sms, String("+79161112219")); sms = ""; sms += val3; val3=""; } val3 += ((timerval[i]-rtc.getUnixTime(t))/60); val3 += " min\n"; if ((sms.length() + val3.length()) <= 130) {sms += val3; val3=""; } if ((sms.length() + val3.length()) > 130) { Serial.println(sms); smssend(sms, String("+79161112219")); sms = ""; sms += val3; val3=""; } } break; } } Serial.println(sms); smssend(sms, String("+79161112219")); sms = ""; } в монитор прилетает : Код (C++): R1 cool 12 24 // этот кусок не приходит. приходит пустая смс R2 time Int1+++++++ on 9:29 off 9:30 Int2+++++++ on 13:56 off 13:40 R3 manual OFF R4 heat 14 28 R5 timer 6762 min SMS send started SMS send complete R6 signCh1 Lvl1 //этот кусок приходит R7 signCh2 Lvl1 SMS send started SMS send complete AAT+CMGS="+79161112219" > +CMGS: 3 OK изначально пробовал отправлять смски длиной вплоть до 160символов и они приходили. далее происходили глюки, но оно и понятно. как видно в коде при формировании сообщения я снизил длину сообщения до 130символов и всёравно приходит пустое смс. короткая часть статуса приходит нормально. примечательно что изначально (при ограничении на длину сообщения в 155 символов) сообщения отправлялись нормально, а потом начали приходить пустые сообщения. я уменьшил ограничение до 145 символов и сообщения приходили нормально. потом опять начали приходить пустые сообщения. такое ощущение что где то забивается память. уже всячески пытался удалить смски с модуля... подскажите где копать? модуль доработан кондером 6.3в 3300
ардуина про мини, Скетч использует 25 690 байт (83%) памяти устройства. Всего доступно 30 720 байт. Глобальные переменные используют 1 316 байт (64%) динамической памяти, оставляя 732 байт для локальных переменных. Максимум: 2 048 байт. проверку на длину сообщения вынесу в отдельную функцию завтра... но не пойму почему изначально сообщения отправлялись, а потом нет. питание от usb-ttl зная особенности модуля, можно подумать что виновато питание.... но может надо как то иначе отправлять или как то иначе чистить память симки...