Closed FangXS-github closed 8 months ago
Please show your code. In general, You should be checking the .scale
member of the returned structures - if zero, the values are not valid.
i used ur example code, do not add any check now, I will add validation code,thanks :
enum minmea_sentence_id id = minmea_sentence_id(gps_data_array, false);
switch (id) {
case MINMEA_SENTENCE_RMC: {
struct minmea_sentence_rmc frame;
if (minmea_parse_rmc(&frame, gps_data_array)) {
gps_info( "$xxRMC: raw coordinates and speed: (%d/%d,%d/%d) %d/%d\n",
frame.latitude.value, frame.latitude.scale,
frame.longitude.value, frame.longitude.scale,
frame.speed.value, frame.speed.scale);
gps_info( "$xxRMC fixed-point coordinates and speed scaled to three decimal places: (%d,%d) %d\n",
minmea_rescale(&frame.latitude, 1000),
minmea_rescale(&frame.longitude, 1000),
minmea_rescale(&frame.speed, 1000));
gps_info( "$xxRMC floating point degree coordinates and speed: (%f,%f) %f\n",
minmea_tocoord(&frame.latitude),
minmea_tocoord(&frame.longitude),
minmea_tofloat(&frame.speed));
}
else {
gps_info( "$xxRMC sentence is not parsed\n");
}
} break;
case MINMEA_SENTENCE_GGA: {
struct minmea_sentence_gga frame;
if (minmea_parse_gga(&frame, gps_data_array)) {
gps_info( "$xxGGA: fix quality: %d\n", frame.fix_quality);
}
else {
gps_info( "$xxGGA sentence is not parsed\n");
}
} break;
case MINMEA_SENTENCE_VTG: {
struct minmea_sentence_vtg frame;
if (minmea_parse_vtg(&frame, gps_data_array)) {
gps_info( "$xxVTG: true track degrees = %f\n",
minmea_tofloat(&frame.true_track_degrees));
gps_info( " magnetic track degrees = %f\n",
minmea_tofloat(&frame.magnetic_track_degrees));
gps_info( " speed kph = %f\n",
minmea_tofloat(&frame.speed_kph));
}
else {
gps_info( "$xxVTG sentence is not parsed\n");
}
} break;
case MINMEA_SENTENCE_ZDA: {
struct minmea_sentence_zda frame;
if (minmea_parse_zda(&frame, gps_data_array)) {
gps_info( "$xxZDA: %d:%d:%d %02d.%02d.%d UTC%+03d:%02d\n",
frame.time.hours,
frame.time.minutes,
frame.time.seconds,
frame.date.day,
frame.date.month,
frame.date.year,
frame.hour_offset,
frame.minute_offset);
}
else {
gps_info( "$xxZDA sentence is not parsed\n");
}
} break;
case MINMEA_INVALID: {
gps_info( "$xxxxx sentence is not valid\n");
} break;
default: {
gps_info( "$xxxxx sentence is not parsed\n");
} break;
}
thanks, solved..
I will work on improving the example - it should indeed check those!
:smile: :+1:
When I use Minmea on MCU, there is an error in obtaining data when the GPS module is not fully prepared (it takes 5-10 minutes to prepare for the first power on); such as input:
$GNVTG,,,,,,,,,N*2E
and via minmea output: $xxVTG: true track degrees = 510423550381407680000000000000000000000.000000 magnetic track degrees = 510423550381407680000000000000000000000.000000 speed knots = 510423550381407680000000000000000000000.000000 speed kph = 510423550381407680000000000000000000000.000000