
Originally Posted by
FromTheCockpit
How can I get xx.x into xxx as there is an "." in the middle and also the datasheet says about only one digit before decimal -Which I wonder WHY? as speed will become two digits once it goes above 9 knots. How do I use the SKIP in a problem like this where decimal will change place?
I get what you are saying now. I think my gps example had a static xxx.x output, but most of the new (non handheld) ones (like yours) do not.
This should do the trick, hopefully not too much trouble shooting involved.
It reads in 5 characters to the array named raw_speed[x]. Then it counts decimal places to the "." character. Then adds the digits together after multiplying them by the right power of 10.
Code:
raw_speed var byte[5] 'create an array to put each possible character for speed
i var byte
decimal var byte
speed var word
DEBUGIN 2000,ab,[WAIT("$GPRMC"),skip 14,DEC2 ladeg,DEC2 lamin,skip 1,DEC3 lasec1,skip 4,DEC3 lodeg,DEC2 lomin,skip 1,DEC3 losec1,skip 4,raw_speed[0],raw_speed[1],raw_speed[2],raw_speed[3],raw_speed[4]]
for i = 1 to 3
'find which character is the decimal point
if raw_speed[i]="." then decimal = i
next i
'combine single digits to form whole speed number. Varies from 0.0 to 999.0
select case decimal
'if our gps gives us 1.4, then this will convert it to 14
'the -48 is a way to convert an ascii number to a number
case 1 'decimal is in x.x position
speed=(10*(raw_speed[0]-48))+(raw_speed[2]-48)
case 2 'decimal is in xx.x position
speed=(100*(raw_speed[0]-48))+(10*(raw_speed[1]-48))+(raw_speed[3]-48)
case 3 'decimal is in xxx.x position
speed=(1000*(raw_speed[0]-48))+(100*(raw_speed[1]-48))+(10*(raw_speed[2]-48))+(raw_speed[4]-48)
end select
Bookmarks