# GPS modul. How to get speed and put it in variable?

Posted on
• Hi guys!
I want to get the speed and, depending on it do an actions, for example, to light the LED.
I see 2 ways of solving this problem.
the first one
Use the standard Esprino library, taken from the link below.
https://www.espruino.com/GPS

``````Serial3.setup (115200, {rx: P0, tx: P1});
var gps = require ("GPS"). connect (Serial3, function (data) {
console.log (data);
});
``````

The following data is displayed:

``````{"time": "16:35:29", "lat": 53.068403, "lon": - 4.076282, "fix": 1, "satellites": 7, "altitude": 1085.0}
``````

There is no speed but I can get it if i know Time1 and Time0 and latitude, longitude at Time1, Time0.
I can colculat the distance pased using formulas from there http://www.movable-type.co.uk/scripts/la­tlong.html.

, then devide it on diff betvin T1 and T0

The problem is

How get latitude, longitude at T1, T0 from this code?
Serial3.setup (115200, {rx: P0, tx: P1});
var gps = require ("GPS"). connect (Serial3, function (data) {
console.log (data);
});
if i try somth like this

``````Serial3.setup(115200, {rx: P0, tx: P1});
var gps = require("GPS").connect(Serial3, function(data) {
T1=data;
return T1;
})
console.log(gps)enter code here
``````

i get empty valus in console.

.
the second way is to communicate with serial
I use such cod

``````Serial3.setup (115200, {rx: P0, tx: P1});
var bufer = '';
Serial3.on ('data', function (data) {
bufer + = data;
var lines = bufer.split ('\$');
bufer = lines [lines.length-1];
if (lines.length> 1) {
for (l = 0; l <lines.length-1; l ++) {print (lines [l]);}}});
``````

Problem
As a result, it get all data from GPS controller but here http://www.gpsinformation.org/dale/nmea.­htm
I have not found any messages with such codes, and accordingly I do not understand what position, what it means, and how it's to pars it to get the speed. How to pars the
NMEA sentent ?

• I think something like this will do what you want:

``````Serial3.setup (115200, {rx: P0, tx: P1});
var lastData;
var gps = require ("GPS"). connect (Serial3, function (data) {
console.log (data);
if (lastData) {
// do stuff here - eg. the difference between the two readings
var dlat = data.lat - lastData.lat;
var dlon = data.lon - lastData.lon;
}
lastData = data;
});
``````

Although as you say, you might be able to extract the data that you want from other NMEA data. For instance `VTG` - `Velocity made good` sounds promising

• Wow great. it works!!!

``````Serial3.setup (115200, {rx: P0, tx: P1});
var lastData;
var gps = require ("GPS"). connect (Serial3, function (data) {

if (lastData) {
// do stuff here - eg. the difference between the two readings
var dlat =data.time;
//   var dlon = data.lon - lastData.lon;
console.log (dlat);
console.log ('*->',lastData);

}

lastData = data.time;
// return lastData;
});
``````
• In general, going on the path 1 with yours help, I wrote such code, but there are some strange mistakes = (such as 45 km / h at rest). I tested it in my car. Visually it coincides with the speedometer in my smartphone =)

``````//*********
Serial3.setup (115200, {rx: P0, tx: P1});

var R = 6371e3; //
var Led= require('@amperka/led').connect(A1);

var lastData; //
var lastData2; //
var lastLon;  //
var lastLat; //
var LastTime;
var i=0;

var gps = require ("GPS"). connect (Serial3, function (data) {

if (lastData,i<50) {
// do stuff here - eg. the difference between the two readings
//****** distance calc
var Lon=data.lon*toRad; // lon в  t1
var a= Math.sin(diffLat/2) * Math.sin(diffLat/2) +
Math.sin(diffLon/2) * Math.sin(diffLon/2);

var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
var distansP = R * c;
//****** time diff
var tTime= data.time.split(':'); // time array
tTime=tTime;
var diffTime=tTime-LastTime;
//****** speed
var speed1= distansP/diffTime; // m/s
var speed2= speed1*3.6; // km/h

if(speed2>60){

Led.turnOn();
}
else{Led.turnOff();}
console.log(speed2,speed1);

}

lastData=data;
lastLon=data.lon; // in degrees

lastLat=data.lat; //in degrees

LastTime=  data.time.split(':');
LastTime= LastTime;

//  lastData = data.time.split(':');
//lastData2 = lastData;
//  lastLon= data.lon;
i=i+1;

});

``````
• Post a reply