---
title: "Parsing laser distance meter serial output"
date: 2013-08-16
---

UPDATE: Serial commands and timing information are now available
[here][1].

This is a follow-up on my previous article about an [arduino-compatible laser
distance meter with serial output][2]. I've received several emails asking for
example code to parse the serial output.

image:photo-16-580x435.jpg

```
int strstart_P(const char *s1, const char * PROGMEM s2)
{
   return strncmp_P(s1, s2, strlen_P(s2)) == 0;
}

int getdist(void)
{
   char buf[64];
   char *comma;
   int dist;
   int rc;

   for (;;) {
       rc = Serial.readBytesUntil('\n', buf, sizeof(buf));
       buf[rc] = '\0';

       if (!strstart_P(buf, PSTR("Dist: ")))
           continue;

       comma = strchr(buf, ',');
       if (comma == NULL)
           continue;

       *comma = '\0';

       dist = atoi(buf + strlen_P(PSTR("Dist: ")));
       return dist;
   }
}

void setup(void)
{
   Serial.begin(115200);
}

void loop(void)
{
   int dist_mm;
   int dist_m;
   char buf[128];

   dist_mm = getdist();
   dist_m = dist_mm / 1000;

   snprintf_P(buf, sizeof(buf),
       PSTR("Laser distance: %d.%dm"),
       dist_m, dist_mm % 1000);

   Serial.println(buf);
}
```

image:Screen-Shot-2013-08-16-at-3.44.37-AM-580x323.png

[1]: /laser-distance-meter-update-serial-commands-timing-measurements/
[2]: /arduino-laser-distance-meter/