С GSM модема читаю СМС, по serial ответ приходит в таком виде, записываю его в char[100] Подскажите как можно выделить и записать в новую переменную text sms?
Вам по сути нужно написать синтаксический анализатор СМС. Это не очень сложно реализуется, но требует довольно долгого объяснения. Поскольку вам не нужно обрабатывать всю служебную информацию в этой строке, достаточно упрощенного правила разбора. Что-то вроде "если строка не начинается на AT или +CGMR или OK, то ее нужно добавить к text sms", но это очень грубо. Нужно определиться, что есть "text sms" из всего этого, почему любые другие части строки не могут быть признаны частью "text sms". Если вы покажете эту строчку человеку, который ни разу не видел модема с его AT-командами и не знает деталей работы GSM модуля, он, вероятно, не сможет определить где начинается и где заканчиватся "text sms". Вот микроконтроллер - это такая же штука, которая ничего об окружающем мире не знает и вы должны обяснить ему, почему, например, "2013/10/02 04:57:49+24" или "ОК" не являются частью СМСки. p.s. Символы перевода строк передаются или там просто сплошной текст?
единственно чтобы библиотека работала без лишних заморочек с этим модулем GPRS Shield v2 (эмуляция 7-8 контакты.) в файле GSM.cpp найти строки Код (Text): #define _GSM_TXPIN_ 2 #define _GSM_RXPIN_ 3 и заменить их на Код (Text): #define _GSM_TXPIN_ 7 #define _GSM_RXPIN_ 8
Unixon А что если написать простую функцию аналог регулярных выражений только под заранее заданный шаблон так скажем. Ну если идеология строки не меняется конечно особо сильно. Ведь по сути как я понимаю в данном тексте, текст СМС все что начинается с третей "начала строки" и заканчивается ОК которое начинается с новой строки и после которого уже нет ничего, то есть конец текста. И того мы перебираем символ за символом в буфере, отсчитывая '\n' и после второго начинаем запоминать все символы как текст пока не встретим "ОК\0" То есть на каждом '\n' при переборе текста мы проверяем что следует в трех следующих символах и если это не "OK\0" то идем дальше а если ОНО то все кАнЭц Не вариант ?
Да, это понятно. Но оно там есть на самом деле или текст передается одним куском без переводов строк?
Cимволы тоже передаются, вот HEX-вид сообщения: Я как раз хотел так сделать, пробовал спомощью sscanf, строку вида 123,456,789 разбирает без проблем Код (Text): 1 char buffer[100]; 2 char a[10]; 3 char b[10]; 4 char c[10]; 5 sscanf(buffer, "%[^','],%[^','],%[^',']", &a, &b, &c); Далее пытался исключить из области поиска 0x0a либо 0x0d Код (Text): sscanf(buffer, "[^'0D']%x,[^'0D']%x,[^'0D']%x", &a, &b, &c); sscanf(buffer, "[^'0A']%x,[^'0A']%x,[^'0A']%x", &a, &b, &c); Но видимо синтаксис неправильно задал, не сработало.
Вариант для данного случая: пробежать по строке, найти 8-ю кавычку, от нее отступить пару байт и копировать до появления двойного "\n\r".