Раcчленить String
- Войдите на сайт для отправки комментариев
Втр, 13/10/2015 - 16:48
Мужики, добрый вечер! Всю башку сломал - не выходит каменый цветок. Дружу мегу с жпрс-шилдом таким кодом:
String s=""; void setup() { Serial.begin(19200); Serial3.begin(19200); } void loop() { while (Serial3.available()) { char c=Serial3.read(); s+=c; } Serial.print(s); s=""; }
Получаю при звонке на модем строку вида:
RING +CLIP: "+79171234567",145,"",,"",0
Все прекрасно. Теперь хочу с помощью substring'а вытащить из нее , к примеру, слово "RING", теоретически подозревая, что перед ним подряд идут скорее всего символы (порядок не важен) "\n\0\r"... Пишу код:
String s=""; void setup() { Serial.begin(19200); Serial3.begin(19200); } void loop() { while (Serial3.available()) { char c=Serial3.read(); s+=c; } if (s.substring(0, 4)=="RING") Serial.print("RING0"); if (s.substring(1, 5)=="RING") Serial.print("RING1"); if (s.substring(2, 6)=="RING") Serial.print("RING2"); if (s.substring(3, 7)=="RING") Serial.print("RING3"); if (s.substring(4, 8)=="RING") Serial.print("RING4"); s=""; }
Но получаю молчание в Serial... Где прогон?
http://www.cplusplus.com/reference/cstring/strstr/
http://www.cplusplus.com/reference/cstring/strstr/
Все классно, кроме того, что нифига не понятно. Я вот отсюда слизал: https://www.arduino.cc/en/Tutorial/StringSubstring И помнится мне, раньше это все работало примерно с тем же кодом, а сейчас никак не въеду в трабл...
вытащить из нее , к примеру, слово "RING"
на то есть функция , я не kisoft - вспомню-подскажу :)
вытащить из нее , к примеру, слово "RING"
на то есть функция , я не kisoft - вспомню-подскажу :)
Конечно есть - substring например)... Но ни она, ни startsWith, ни endsWith не хотят работать...
не то это :( , отпуск......
не надо использовать String !
не то это :( , отпуск......
не надо использовать String !
Ну есть у него минусы, но для меня они не критичным, а вот плюсы крайне удобны))
в цикле while поставьте переменную счетчик i++ и выводите её в Serial вместе с переменной с
скорее всего в Serial сыпется еще какой-то мусор из возвратов каретки и т.д., и не факт что их всего четыре, а ваш substring ищет значение RING в фиксированных положениях строки. почитайте про Serial.available(), там могут быть просто необработанные символы с предыдущего запроса. Попробуйте поставить Serial.flush() перед обращением к порту.
я как раз в такой ситуации вместо substring писал собственную функцию, которая обрабатывает входящий поток, выискивая оттуда нужную подстроку.
Андрей, ну неужели религия не позволяет поставить после строки 14 вывод переменной s в сериал и просто посмотреть что и с чем Сравниваете? Просто посмотреть! Какого хрена вы все вслепую работаете?
Андрей, ну неужели религия не позволяет поставить после строки 14 вывод переменной s в сериал и просто посмотреть что и с чем Сравниваете? Просто посмотреть! Какого хрена вы все вслепую работаете?
Я может чего не догнал, но в первом коде вроде так и есть...
Дык получаю тоже самое тогда что и во втором коде))).. А правильно будет в третьем коде после 14 строки написать допустим String X=s.substring(0, 10); и затем печатать X?
А что, целикон нельзя напечатать? Ну, печатайте хоть так.
А что, целикон нельзя напечатать? Ну, печатайте хоть так.
Целиком если печатать, то выходит точь-в-точь второй код... Тобишь как будто все логично и все правильно, но substring не работает... Я конечно могу распарсить строку методом отлавливания символов конца строки и прочей ерунды, но это нагромождает код мне кажется, но если вы посоветуете делать именно так, то я брошу идею с сабстрингом ибо лучше сделать как знающие говорят!)
Андрей, наш диалог длится уже несколько часов. А ведь всё, что я Вам сказал - ну, напечатайте Вы, наконец что и с чем Вы сравниваете и посмотрите!!!! Просто перед сравнением напечатайте то, что сравниваете. Трудно поставить печать после строки 14, а перед каждым if поставить печать соответсвующей substring (из этого if)??? Просто сделайте это! И посмотрите, что увидите. Не поймёте, выкладывайте свежий код и лог печати, вместе смотреть будем. Нафига вслепую работать?
да ладно там вывод на сериал. пусть сделает хотябы Serial.flush();
Раcчленить String = получим Short -ы А вы тут Серийный.Вратель(блин)-Серийный.Вратель(блин)-Serial.write(blin);
Десяток постов в ветке программирование прочитал ничего не понял. Одни истерики ЕвгенияП. Евгений давай рюмашку ликерчика дзинь. :)
Конченные автоматы с потерей совместимости.
Лень примеры в компиляторе полистать.
и т.д. и т.п.
Ликерчик?!?! Обижать изволите, барин. Я русский человек, а Вы мне ... ликёрчику ... тьфу! :)
Ликерчик?!?! Обижать изволите, барин. Я русский человек, а Вы мне ... ликёрчику ... тьфу! :)
ЦеДваАшОАшПять я давно стаканом не пью и АшДваОАш не запиваю каждые 30 минут для получения СорокаОдного Градуса для лучшего сног сшибания. Мой организм зная этот составчик очень быстро реагирует и отправляет пугать унитаз. Короче я пил всякого пил разного. Искушал разных жидкостей. Когда-то во всю дверь туалета был плакат с сотней видов пива. Когда я отдегустировал более 50% того что на плакате собрано начались проблемы с поиском приличного пива. Очень вам не советую из пластмасовой бутылки пить, а уж если не втерпежь употреблять надо пока яды с пластика в пиво не поперли в течении суток. Потому женой приготовленный ликерчиком смаковать люблю.
Вот из местных форумных архивов. Густой сладкий темный как кровь. Мозги после него работают а ходить и вставать сос тула не хочеться. :) У жены ликерчик получаются по разному. Иногда как портвейн крепкий иногда как сироп разбавленный. Рецепта не знаю. Знаю что чернополдную рябину жена на даче собирает. Сахар точно. Водка точно. Делает очень быстро. И вуаля. Муж уже никуда не уходит. А огурки какие класные готовит. Вах. Вах. Пальчики оближешь. Поэтому как ни крути string-и если делить быстро превращаются в short-ы. Все завист от того чтобы стек не переполнялся мусором. И тогда divide over flow тебе не страшен. А то смотрю перполняет твой стек. Прогамма твоя выходит за предели пользовательского пространства и попадает в облясть ядра. Поэтому надо для снижения темепратуры понизить или частоту прочтения дури ленивых или скорость процессора отвечающего на внешние раздражители. :)
Вообщем не стал я лишний раз раздражать всех лишним кодом с постоянным выводом в сериал после всяческих манипуляций... Но метод научного тыка никто не отменял и вставив в первый код в цикл while после 13ой строки "delay(3)", сразу все поперло как часы... (delay(1) и delay(2) подглючивали, постоянно изменяя показания в substring'е, а вот delay(3) и более сразу стабилизировал показания). О херня какая...
Вообщем не стал я лишний раз раздражать всех лишним кодом с постоянным выводом в сериал после всяческих манипуляций...
Отнюдь! Могу Вам выложить хоть весь километр кода, а также все его модификации ибо ценю, что Вы тратите на меня хоть минутное, но время). То, что я "замаскировал" проблему - это же тоже некая полезная информация в процесс ее понимания? Если, конечно, всей этой информации недостаточно, то с удовольствием выложу результаты всех сабстрингов)
Пример работы с модулем.
Собрал себе модем в авто, котел запускать и останавливать, ну и попутно, по запросу смску шлет о сотоянии датчиков.
Пока еще на соплях все на столе развалено и код сырой, но работает.
Я свой дровяной пока научил только по звонку с двух номером смски слать с параметрами всеми ) остальное через w5100