Ви не увійшли.
о, чотенько. А чего через жопу?
p[9] = '\0';
но это через задницу решение )
Как убрать последние 2 символа в 4634.54557, (запятая и семерка), чтоб получилось 4634.5455 ?
#include "string.h"
char *s = "$GPRMC,214603.000,A,4634.54557,N,03047.50473,E,0.00,0.00,040617,,,A*6E";
char *p;
void setup(void) {
Serial.begin(115200);
p = strchr(s, 'A') + 2; // тут начало от А +2 символа
p = strtok(p, "N"); // тут после , обрезает лишнее но как сделать типо -2 ?
Serial.println(p);
}
void loop(void) {}
Получилось получить 03047.50473 то, что в принципе и нужно, но опять таки как убрать тут последнюю цифру?
#include "string.h"
char s[] ="$GPRMC,214603.000,A,4634.54557,N,03047.50473,E,0.00,0.00,040617,,,A*6E";
char * p;
int a = 0;
void setup(void) {
Serial.begin(115200);
p = strtok (s,",");
for(int i=0; p != NULL; i++)
{
a++;
if (a == 5) { // тут указываю число расчлененной части S
Serial.println(p);
}
p = strtok (NULL, ",");
}
}
void loop(void) {}
В общем для решения можно пойти тремя путями.
1- использовать указатели
2- использовать встроенные средства языка Си
3- использовать String
Ну и по мне еще лучше написать свой String под решение этой задачи. Но мне это зачем. Я же не ТС.
ПС: А памяти хватит, если прямыми руками писать код.
нашел...
http://forum.arduino.ua/viewtopic.php?pid=20828#p20828
точно что то пробовал такое делать )
парсер простой,
Вячеслав Азаров сколько добавляет кода такая либа? никогда даже не пробовал подключать, всегда места не хватает (
Elmirus3 если забить на пробки то "to GIS" но пару разпод знак пускал.
скиньте в личку viber / скайп я обьясню
0634259229 можно и так)
Elmirus3 если забить на пробки то "to GIS" но пару разпод знак пускал.
скиньте в личку viber / скайп я обьясню
"Вряд ли здесь кто то захочет писать Вам парсинг (если у него готового нет) smile ."
Я Одессе по старой памяти сделаю )
как упоительные были ночные брожения с пивзавода по проспекту Шевченко ))))
хотя вчера так ругался !!! когда нахренатор ( испоганили таки "товарищи" с mail.ru maps.me ) через центр пустил вместо того что б через Авангард рвануть. но ет не по делу )
Да без майла жостко с пробками. Я в прошлом месяце в Киеве с гуглкартами потерялся((
За либу спасибо, ее призывать так как и tinygps++?)
"Вряд ли здесь кто то захочет писать Вам парсинг (если у него готового нет) smile ."
Я Одессе по старой памяти сделаю )
как упоительные были ночные брожения с пивзавода по проспекту Шевченко ))))
хотя вчера так ругался !!! когда нахренатор ( испоганили таки "товарищи" с mail.ru maps.me ) через центр пустил вместо того что б через Авангард рвануть. но ет не по делу )
Elmirus3 вам нужно немного поправить библиотеку или поискать другую.
change на быструю руку без проверки multiplier .
// static
// Parse degrees in that funny NMEA format DDMM.MMMM
void TinyGPSPlus::parseDegrees(const char *term, RawDegrees °)
{
uint32_t leftOfDecimal = (uint32_t)atol(term);
// uint16_t minutes = (uint16_t)(leftOfDecimal % 100);
// uint32_t multiplier = 10000000UL;
uint32_t multiplier = 100000UL;
// uint32_t tenMillionthsOfMinutes = minutes * multiplier;
uint32_t tenMillionthsOfMinutes = 0;
// deg.deg = (int16_t)(leftOfDecimal / 100);
deg.deg = leftOfDecimal;
while (isdigit(*term))
++term;
if (*term == '.')
while (isdigit(*++term))
{
multiplier /= 10;
tenMillionthsOfMinutes += (*term - '0') * multiplier;
}
// deg.billionths = (5 * tenMillionthsOfMinutes + 1) / 3;
deg.billionths = ( tenMillionthsOfMinutes );
deg.negative = false;
}
эта либа под GNU Lesser General Public License (LGPL) не забывайте )
Nefreemen они сразу переводят в градусы при парсинге
DDMM.SSSS > DD.DDDDDDDDDD
case COMBINE(GPS_SENTENCE_GPRMC, 3): // Latitude
case COMBINE(GPS_SENTENCE_GPGGA, 2):
location.setLatitude(term);
break;
case COMBINE(GPS_SENTENCE_GPRMC, 4): // N/S
case COMBINE(GPS_SENTENCE_GPGGA, 3):
location.rawNewLatData.negative = term[0] == 'S';
break;
case COMBINE(GPS_SENTENCE_GPRMC, 5): // Longitude
case COMBINE(GPS_SENTENCE_GPGGA, 4):
location.setLongitude(term);
break;
умножать на 100 это лишнее )
Если так не подходит (в лоб ) поскольку лишняя цифра. Что бы не парсить (это не совсем простая задача для Вас) то используйте ту библиотеку о которой Вы упоминали, я так понял что речь идет о https://github.com/mikalhart/TinyGPSPlus.
Я мельком глянул, насколько понял то она позволяет получить (как свойство объекта ) любую величину GPS данных. Если она Вам дает не там запятую то умножьте на 100 .
Вряд ли здесь кто то захочет писать Вам парсинг (если у него готового нет) .
http://www.rapidtables.com/convert/number/degrees-to-degrees-minutes-seconds.htm
Example
Convert 30.263888889° angle to degrees,minutes,seconds:
d = integer(30.263888889°) = 30°
m = integer((dd - d) × 60) = 15'
s = (dd - d - m/60) × 3600 = 50"
So
30.263888889° = 30° 15' 50"
То есть приходит в монитор порта вот такая шняга и из 2й строки $GPRMC нужно оставить хотя бы выделенное красным:
2я строка как раз нужного формата, но как убрать в ней по последней цифре в долготе и широте?
Получается, левые 2 цифры, при наличии которых сервер отказывается показывать местоположение: