Как извлечь нужные числа из serial?
- Войдите на сайт для отправки комментариев
Вс, 11/02/2018 - 11:04
Всем привет! Ребята нужна выша помащь.
Немогу разобратся как вынуть конкретные числа из данных полученых по Serial.
Они находятся в 11, 12, 13, 14, 15 строках. В строках 11, 12, 13 по два числа с плавающей запятой. А в строках 14, 15 по два целых числа.
Строки содержащие ответ начинаются после запроса "> adsl info --show"...
Вот так выглядит запрос и ответ...
Правда ответ не весь там ещё ппродолжение есть но то что находится после 15 строки мне ненужно...
все достаточно просто - к примеру, ищете строчку, начинающуюся с "SNR (db):" и читаете ее посимвольно , пока не встретите число. Потом "проглатываете" пробелы, пока не встретите другое число.
И так с каждой строкой, которую нужно обработать.
Единственное - это надо делать быстро, чтобы буфер Сериал не переполнился.
Получается както так?
Блин чтото я со стрингами совсем не дружу )
Не надо использовать startsWith - у вас прочитанные данные совершенно необязательно начинаются с новой строки. Ищите вхождение "SNR(db):" с помощью IndexOf().
И имейте в виду, что функция readString() имеет не вполне точное название - она вовсе не читает из Сериал одну строку
Тогда как мне занести данные полученные из порта в переменную?
Так?
Тоесть получается пока порт чтото пренимает, переменная _dannie будет какбы накапливать все приходящие новые данные..
Спасибо! Значит начну с этого..
Тоесть получается пока порт чтото пренимает, переменная _dannie будет какбы накапливать все приходящие новые данные..
Спасибо! Значит начну с этого..
Нет, они ничего не накаплиывет. Напротив, она вычитывает из буфера то, что к настоящему моменту там накопилось. Без всяких гарантий того, что начало будет совпадать с началом строки, а конец - с концом. Т.е. просто то, что успел принять буфер после предыдущего проходя этого программного фрагмента.
Например, за первый проход может быть прочитано "SNR(", а за второй - "db):". Естественно, искомой Вами подстроки не окажется ни в одном из фрагментов.
Значит нужно будет обнулить буфер и выйти из цыкла после получения всех необходимых данных я правильно понимаю ??
Значит нужно будет обнулить буфер и выйти из цыкла после получения всех необходимых данных я правильно понимаю ??
не понял вопроса
Блин ну типерь я совсем запутался.......
Lexan, для того, чтобы давать конкретные рекомендации, недостаточно информации. Вы, например, не указали, откуда берутся данные. Можно ли изменить формат их выдачи, какие используются служебные символы и в каком качестве.
Если выдающее денные устройство - Ардуина, желательно показать скетч, который формирует этот вывод. Если какое-то устройство, то к нему должно быть описание выдававемой информации. Если ни того, ни другого нет, я бы перенаправил вывод в файл, а там его внимательно изучил при помощи какого-нибудт HEX-редактора. В первую очередь на вхождение символов 0х09, 0х0A, 0x0D.
Ну вроде разобрался смог выдернуть нужные числа в строковом виде String.
Теперь вопрос как проще преобразовать String в float и String в int?
Ну вроде разобрался смог выдернуть нужные числа в строковом виде String.
Теперь вопрос как проще преобразовать String в float и String в int?
зря вы вообще со String связались - пожалеете. Делали бы сразу в char*
Покачто парсинг для меня давольно тёмный лес ))
Такчто пока я рад что хоть так получилось...
Для преобразования String to float нужна ли библиотека?
Или можно както стандартными обоитись?
"Convert" видимо в C++ не используется я правильно понимаю?
String.toFloat, String.toInt не годятся чтоли?
Да нет я бы какраз хотел без лишних библиотек.
Просто не так давно до String добрался. И покачто такое ещё не проходил... ))
А можно на примере показать?
А можно на примере показать?
привыкайте пользоваться поиском и документацией, а не задавать на форуме элементарные вопросы...
Из официальных доков: https://www.arduino.cc/en/Tutorial/StringToInt