package lejos.addon.gps; import java.util.*; /** * VTGSentence is a Class designed to manage VTG Sentences from a NMEA GPS Receiver * * $GPVTG * * Track Made Good and Ground Speed. * * eg1. $GPVTG,360.0,T,348.7,M,000.0,N,000.0,K*43 * eg2. $GPVTG,054.7,T,034.4,M,005.5,N,010.2,K*41 * * 054.7,T True course made good over ground, degrees * 034.4,M Magnetic course made good over ground, degrees * 005.5,N Ground speed, N=Knots * 010.2,K Ground speed, K=Kilometers per hour * * eg3. for NMEA 0183 version 3.00 active the Mode indicator field * is added at the end * $GPVTG,054.7,T,034.4,M,005.5,N,010.2,K,A*53 * A Mode indicator (A=Autonomous, D=Differential, * E=Estimated, N=Data not valid) * * @author Juan Antonio Brenha Moral (major recoding by BB) */ public class VTGSentence extends NMEASentence{ //RMC Sentence // TODO: Convert any of these floats to int? private float speed = 0; // TODO Probably default values should be negative? private float trueCourse = 0; private float magneticCourse = 0; //Header public static final String HEADER = "$GPVTG"; /* * GETTERS & SETTERS */ /** * Returns the NMEA header for this sentence. */ public String getHeader() { return HEADER; } /** * Get Speed in Kilometers * * @return the speed in kilometers per ??? */ public float getSpeed(){ checkRefresh(); return speed; } /** * Get true course, in degrees. * * @return the true course in degrees 0.0 to 360.0 */ public float getTrueCourse(){ checkRefresh(); return trueCourse; } /** * Get magnetic course, in degrees. Holux-1200 GPS doesn't have a built in magnetic compass so * this value is blank. * * @return the magnetic course in degrees 0.0 to 360.0 */ public float getMagneticCourse(){ checkRefresh(); return magneticCourse; } /** * Parase a RMC Sentence * * $GPVTG,054.7,T,034.4,M,005.5,N,010.2,K,A*53 */ protected void parse (String sentence){ st = new StringTokenizer(sentence,","); try{ st.nextToken();//skip header $GPVTG trueCourse = Float.parseFloat(st.nextToken());//True course made good over ground, degrees st.nextToken();//Letter String sTemp = st.nextToken(); if(sTemp.length() > 0) // This is blank with Holux-1200 magneticCourse = Float.parseFloat(sTemp);//Magnetic course made good over ground st.nextToken();//Letter st.nextToken();//Ground speed, N=Knots TODO: Could offer this value too. st.nextToken();//Letter speed = Float.parseFloat(st.nextToken());//Ground speed, K=Kilometers per hour //st.nextToken();//Letter }catch(NoSuchElementException e){ //Empty }catch(NumberFormatException e){ //Empty } }//End Parse }//End Class