Как правильно распарсить строку приходящую через com порт
- Войдите на сайт для отправки комментариев
Втр, 26/09/2017 - 13:15
Добрый день , подскажите пожалуйста как правильно передать и распарсить строку с данными. Я делаю табло на котором выводится прогноз погоды. Передаю вот такую строку в ардуину
wheatherType + "t" + temperature + "d" + windtype;
далее в ардуине я ее обрабатываю вот так
int indexTemperature = full.lastIndexOf('t') + 1; int indexWindDirection = full.lastIndexOf('d') + 1; String wheatherType = full.substring(0,indexTemperature-1); String temperature = full.substring(indexTemperature,indexWindDirection-1); String windDirection = full.substring(indexWindDirection ,counts);
таким образом я получу направление ветра , температуру и есть ли осадки. Но у меня проблема возникла, я хочу передать информацию еще и на вечер и еще плюс на несколько дней вперед. Скажите как правильно такое передать и распарсить потом?
не вижу проблемы,
определи t1 t2 t3, d1 d2 d3 и т.д.
да я уже так и делаю , просто думал может есть какое то другое решение.?
Думаю, что всё зависит от того, как вы на табло выводите и в каком объеме. Может вам будет проще сразу сформировать передаваемую строку: "Clouds 25C North", а если их несколько - соединить через разделитель, по которому потом и порубить.
Если же нет, то сформировать пакет, в котором первый символ - wheatherType, второй - windtype, а все остальное до разделителя - температура. Тогда парсинг упрощается.
Далее - можно передавать не символами, а байтами. Тогда температура, если вам не критичны ее десятые доли, будет кодироваться одним байтом - uint8_t, по-ардуиновски char (тут, конечно, можно и подзапутаться).
Словом, вариантов масса.
Думаю, что всё зависит от того, как вы на табло выводите и в каком объеме. Может вам будет проще сразу сформировать передаваемую строку: "Clouds 25C North", а если их несколько - соединить через разделитель, по которому потом и порубить.
Если же нет, то сформировать пакет, в котором первый символ - wheatherType, второй - windtype, а все остальное до разделителя - температура. Тогда парсинг упрощается.
Далее - можно передавать не символами, а байтами. Тогда температура, если вам не критичны ее десятые доли, будет кодироваться одним байтом - uint8_t, по-ардуиновски char (тут, конечно, можно и подзапутаться).
Словом, вариантов масса.
эмм а можете объяснить поподробнее про последний вариант ?Например нужно ли как то преобразовывать данные перед тем как их передать через компорт и как как их потом обратно преобразовать из байтов в числа и строки?
эмм а можете объяснить поподробнее про последний вариант ?Например нужно ли как то преобразовывать данные перед тем как их передать через компорт и как как их потом обратно преобразовать из байтов в числа и строки?
Начал писать ответ, но понял, что при использовании String у меня получается геморрой с кучей трансформаций (хотя я всегда избегал класса String и не знаю кун-фу). Так что если вы не готовы перейти к варианту строк вида char[] (https://www.arduino.cc/en/reference/String), то лучше остановиться на втором способе.
эмм а можете объяснить поподробнее про последний вариант ?Например нужно ли как то преобразовывать данные перед тем как их передать через компорт и как как их потом обратно преобразовать из байтов в числа и строки?
Начал писать ответ, но понял, что при использовании String у меня получается геморрой с кучей трансформаций (хотя я всегда избегал класса String и не знаю кун-фу). Так что если вы не готовы перейти к варианту строк вида char[] (https://www.arduino.cc/en/reference/String), то лучше остановиться на втором способе.
Хорошо понял спасибо :)