## Comments

#### Mike
Hi, Any furthur info on Laser Range Finder ?

Regards  
Mike

#### qartis
What kind of info do you need?

#### drjohn
Any progress on sending it commands?

Any idea of how fast you can pulse the 'on' line and get reliable results?

#### speleomaniac
some experimenting showed that:

sending char 'r' powers down the system, all other characters except * and # are echoed back.

the device seems to accept commands in form: `*xxxxx#`

where x are numbers. the last number defines the action: i think it accepts only numbers with 5 digits.

`*43531#` outputs:
```
*00021012#pMsgWrite TRUE
pInitDataWrite TRUE
```

`*11112#` turns on laser and does 3 readings, but display shows "Er":
```
Dist: 428,curtemp =18
V2.0
nDist: 428,tempDv=0
Dist: 428,curtemp =18
V2.0
nDist: 428,tempDv=0
Dist: 428,curtemp =18
V2.0
nDist: 428,tempDv=0
u32Dist[0]=428 u32Dist[1] =428 u32Dist[2] =428
u32temp =0
*000720150000000042#
```

`*54343#` does nothing

`*11114#` does a single reading, and displays on lcd. BINGO:
```
Dist: 525,curtemp =18
V2.0
nDist: 525,tempDv=0
```

`*55555#` dumps some data:
```
772*0024500001000022430000000000000000000000000000000040#*0024500002000009340000000000000000000000000000000019#*0024500003000007830000000000000000000000000000000067#*0024500004000009530000000000000000000000000000000040#*0024500005000002980000000000000000000000000000000079#
```

#### Aslak
Hi! How often can this setup read out data? once per sec?

#### Nikolai
This information would interest me also because i can find no information about it.

#### rinnamon
Andrew,

I managed to combine some of the things discussed here so I can now turn it on
(NPN), take a reading (serial), shut it off (serial), and capture all of the
output (serial).The problem I am having it that it is challenging to parse the
output (just providing mm). I tried using your method but it doesn't work for
me. Is there a simple way that I can search the stream for ": " (colon &
space)? or something like that? - The value follows those two characters. - The
serial command also comes back with a response that is a bunch of leading zeros
and the distance value that I am looking for. So, either of these are fine but
it seems like it should be simple to do and yet I am having a very very hard
time doing so.

Any thoughts?


```
....
void loop(void)
{
thisUpdate = millis();

if (thisUpdate >= (lastUpdate + interval)){
// Turn the device on using an NPN transistor
subRecord(); // call the routine to take a reading
}

// Serial.print("I should turn off now");
if (thisUpdate >= (lastUpdate + interval+TimeToTakeReading)){
subOff(); // turn it off
lastUpdate = thisUpdate;
}

//This is how I am reading the data continuously
if(Serial1.available()){
char inByte = Serial1.read();
Serial.write(inByte);
}
}

////////////Sampling the Serial line for a value
void subRecord(){
Serial1.write("*11114#"); //*11114# does a single reading, and displays on lcd. BINGO:
Complete = true;
}
/////////////Turning off
void subOff(){
Serial1.write("r");
Complete = false;
}
```

Results are

```
ldpara:368
curent ver:420411
Year:Jan 21 2013 Time:13:53:10
ldpara:368
Iint OK
GetAPDMinVoltage ÿAPDMIN=186 APDMAX=224
BIASVOLMIN=2311 BIASVOLMAX =2323
(
Dist: 3192,curtemp =18

V2.0
nDist: 3192,tempDv=0

*0006400000319269#
```

#### qartis
See my updated post here:
<http://blog.qartis.com/laser-distance-meter-update-serial-commands-timing-measurements/>

Short answer: about 1 measurement per second for single-shot mode, and about 3
measurements per second for rapid-fire mode.

#### Tom
Hi,  
Could you tell me how could you turn it on?

Thanks in advance!

Tom

#### JCT250
Did you find a datasheet or something with these commands or was it trial and
error? Just wondering if it was trial and error how many of the different
combinations you tried?

#### speleomaniac
Trial and error. After finding out chars * and # are not echoed back, it took
me about 15 tries to figure out the pattern. In short, it was pure luck 🙂

#### JCT250
Ok sweet, Did you just pick random combinations withing the chars * and # or
did you run through a list of them?

Just wondering whether its worth me having a hack at some code that scrolls
through all the *xxxxx# combinations to see if there are any other ones

#### Martin Langelier
hello  
From : <http://y6-multicopter.blogspot.ru/2014/03/blog-post.html>  
the shown code is working in rapid fire, but i whant a one second interval shot

```
boolean recdata = true;
boolean data;
int buf[64];
int rc=0;

void setup()
{
Serial.begin(115200);
Serial1.begin(115200);
//Serial.println("Start...");
}

void loop()
{
static unsigned long t = 0;
if (millis() > (t + 2000)){ // timer start when no data from the sensor
Serial1.write("*00084553#");
t = millis();
}
getdist();
if (recdata) t = millis(); // Reset the timer when it receives data from the sensor
}

int getdist(){
int litera;

if (Serial1.available() > 0){
while (Serial1.available() > 0){
litera = Serial1.read();
if (litera == 42) { // If adopted a "*"
data = true; //Then set the sign of the beginning of the packet
}

if (litera == 35) { // If adopted, the "#"
data = false; //Then set the sign of the end of the package ...
recdata = true; //And install a sign to obtain data for the control (reset) the timer and further processing of the packet
}
if(data==true && rc47){ // If there is a sign of the beginning of the packet, the packet length is reasonable and litera has a numeric value to ASCII, the ...
litera = litera-48;// convert ASCII to figure ...
buf[rc] = litera; // And add it to the array.
rc++;
}
}
}else{
if (recdata == true){
boolean dig=true; //This variable will work to separate the package into categories 2 digits
int countdata=0; //This variable will be considered level
int data=0; //This variable will take the values of bits
int sum=0; //This sum of all digits except for the last
int src=0; //This is the last category (10), which defines the checksum
int countLaser=0; //This is an internal counter in the 5th digit
int dist=0; //It is the distance, we calculate
for(int p = 0; p<rc; p++){
if(dig){
data = buf[p]*10;//Here we have the first sign of any new discharge multiply by 10 ....
countdata++;
}else{
data += buf[p]; // And here we add to it, the second value.
if(countdata= 100) {// If the checksum is greater than 99, then cut off the excess, leaving only the last two
int a=sum;
sum=sum/100;
sum=sum*100;
sum =a-sum;
}
if(sum==src){// If the amount of bits (except the last) is the checksum (last digit) then ...
// Serial.print(" ");
// Serial.print(sum);
// Serial.print(" ");
// Serial.print(src);
Serial.print("t");
Serial.print(countLaser); //Output data of the internal counter
Serial.print("t");
Serial.print(dist);//Output the distance and ...
if(countLaser==99){// if the counter has reached the limit, then ...
Serial1.write("*00084553#"); //give the command to start a new cycle
}
}
src = 0;
countdata = 0;
countLaser = 0;
rc=0;
recdata = false;
Serial.println();
}
}
}
```

#### Mohamed Elsayed
hello andrew i want to ask about how did u discover all these info about that
module coz i have GLM50 bosh and i want to connect it with my MCU and i don't
know from where i can start .

#### Aikidokajeff
Hi, I know it's been a while, but did you ever work out what command would
change the "base" measurement distance from base of unit to top of unit etc?

Thanks,

#### speleomaniac
sorry, i haven't encountered such command.

but you can add or subtract the size of the lasermeter from the measured value
🙂

#### Aikidokajeff
No problem.  
That was my plan.

I've still not found the combination either.

Has anyone else noticed the unit appears to be out by about 2cm - it is
consistent though, so again I can subtract it from the equation.

#### Bob Bowie
Andrew,

I have a remote controlled lawnmower that I would like to convert to a robotic
mower. You can view my mower at:

<http://www.instructables.com/member/Bob+Bowie/>

I am familiar with BASIC programming and have purchased a Basic Stamp.

By programming the Basic Stamp, I can control the wheel chair motors (i.e.,
forward, reverse, and time in motion).

As the mower moves, I need to know its position (x,y coordinates).

I see that you have an article, "Parsing laser distance meter serial output". I
am hoping that you might be able to show me how to parse the laser meter using
the Basic Stamp.

Here's a link to the Basic Stamp:

Basic Stamp Activty Kit

BASIC Stamp Activity Kit - USB (Text v3.0) | 90005 | Parallax Inc

Video:Parallax Perspective: BASIC Stamp Activity Kit

<https://www.youtube.com/watch?v=55Ugmctwoig>

BASIC Stamp Editor Software

<https://www.parallax.com/downloads/basic-stamp-editor-software>
Please email me at: bbowie@yahoo.com

Thank you,
Bob Bowie