コード例 #1
0
ファイル: Gps.cpp プロジェクト: ovenystas/ardumower
unsigned long Gps::parse_decimal()
{
  char *p = _term;
  bool isneg = *p == '-';
  if (isneg)
  {
    ++p;  // skip heading '-'
  }

  unsigned long ret = 100UL * gpsatol(p); // gpsatol = generalPtrStrToLong => convert int-part to long: 90.239 => 100*90
  while (gpsisdigit(*p))
  {
    ++p; // skip converted digits '.'
  }
  if (*p == '.')
  {
    if (gpsisdigit(p[1])) // any number behind '.' ?
    {
      ret += 10 * (p[1] - '0'); // add first decimal
      if (gpsisdigit(p[2]))
        ret += p[2] - '0'; // add second decimal - note all meter values are converted to cm with the precision of 2 digits
    }
  }
  return isneg ? -ret : ret; // negate result if isneg is set
}
コード例 #2
0
ファイル: Gps.cpp プロジェクト: Lordsauron/CarDuino
unsigned long Gps::ParseDegrees()
{
    char *p;
    unsigned long left_of_decimal = gpsatol(_term);
    unsigned long hundred1000ths_of_minute = (left_of_decimal % 100UL) * 100000UL;
    for (p=_term; gpsisdigit(*p); ++p);
    if (*p == '.') {
        unsigned long mult = 10000;
        while (gpsisdigit(*++p)) {
            hundred1000ths_of_minute += mult * (*p - '0');
            mult /= 10;
        }
    }
    return (left_of_decimal / 100) * 1000000 + (hundred1000ths_of_minute + 3) / 6;
}
コード例 #3
0
ファイル: TinyGPS.cpp プロジェクト: aakashrav/IoTForWeather
long TinyGPS::gpsatol(const char *str)
{
  long ret = 0;
  while (gpsisdigit(*str))
    ret = 10 * ret + *str++ - '0';
  return ret;
}
コード例 #4
0
long ParserNMEA::gpsatol(const char *str)
{
	long ret = 0;
	while (gpsisdigit(*str))
	ret = 10 * ret + *str++ - '0';
	return ret;
}
コード例 #5
0
ファイル: gps.cpp プロジェクト: FredericG-BE/ardumower
long GPS::gpsatol(const char *str) // convert string to long - does only work for unsigned ints!
{
  long ret = 0;
  while (gpsisdigit(*str)) // process only digits
    ret = 10 * ret + *str++ - '0'; // inc str after assignment
  return ret;
}
コード例 #6
0
ファイル: gps.c プロジェクト: ribbotson/rlabTelemetryTx
long gpsatol(const unsigned char *str)
{
	long ret = 0;
	while (gpsisdigit(*str))
	ret = 10 * ret + *str++ - '0';
	return ret;
}
コード例 #7
0
ファイル: TinyGPS.cpp プロジェクト: aakashrav/IoTForWeather
unsigned long TinyGPS::parse_degrees()
{
  char *p;
  unsigned long left = gpsatol(_term);
  unsigned long tenk_minutes = (left % 100UL) * 10000UL;
  for (p=_term; gpsisdigit(*p); ++p);
  if (*p == '.')
  {
    unsigned long mult = 1000;
    while (gpsisdigit(*++p))
    {
      tenk_minutes += mult * (*p - '0');
      mult /= 10;
    }
  }
  return (left / 100) * 100000 + tenk_minutes / 6;
}
コード例 #8
0
ファイル: gps.cpp プロジェクト: FredericG-BE/ardumower
unsigned long GPS::parse_degrees()  // term=5000.0095 (50° 00' 0.0095*60'')
{                                        // (D)DDMM.MMMM is the format
  char *p;
  unsigned long left = gpsatol(_term); // get (D)DDMM in left 
  unsigned long tenk_minutes = (left % 100UL) * 10000UL; // get MM*10000
  for (p=_term; gpsisdigit(*p); ++p);  // advance to '.'
  if (*p == '.')
  {
    unsigned long mult = 1000;
    while (gpsisdigit(*++p))
    {
      tenk_minutes += mult * (*p - '0');
      mult /= 10;
    }
  }    
  return (left / 100) * 100000 + tenk_minutes / 6; // DDD * 100000 + tenk_minutes/6=°*10*10000 
}
コード例 #9
0
ファイル: Gps.cpp プロジェクト: Lordsauron/CarDuino
unsigned long Gps::ParseDecimal()
{
    char *p = _term;
    bool isneg = *p == '-';
    if (isneg) ++p;
    
    unsigned long ret = 100UL * gpsatol(p);
    while (gpsisdigit(*p)) ++p;
    if (*p == '.') {
        if (gpsisdigit(p[1])) {
            ret += 10 * (p[1] - '0');
            if (gpsisdigit(p[2])) 
                ret += p[2] - '0';
        }
    }
    return isneg ? -ret : ret;
}