GPS NEO-6M-0-01 ublox + Arduino Mega2560 не получаю данные.
- Войдите на сайт для отправки комментариев
Втр, 28/10/2014 - 15:10
Здравствуйте все кто читает этот пост.
Имеется в наличии GPS NEO-6M-0-01 ublox и Arduino Mega2560 и есть скетч немного отредактированный (информацию для редактирования брал http://forum.arduino.cc/index.php?topic=107876.0 ) пример test_with_gps_device.ino под Arduino Mega2560 из библиотеки TinyGPS.h
Подключил TX GPS к RXD19 Arduino и соответственно RX GPS к TXD18 Arduino что соответствует Serial1 для Mega2560 ( http://arduino.cc/en/Reference/Serial )
Результатом работы видим вот такое...
Testing TinyGPS library v. 13
by Mikal Hart
Sats HDOP Latitude Longitude Fix Date Time Date Alt Course Speed Card Distance Course Card Chars Sentences Checksum
(deg) (deg) Age Age (m) --- from GPS ---- ---- to London ---- RX RX Fail
-------------------------------------------------------------------------------------------------------------------------------------
**** **** ********* ********** **** ********** ******** **** ****** ****** ***** *** ******* ****** *** 84 0 0
**** **** ********* ********** **** ********** ******** **** ****** ****** ***** *** ******* ****** *** 326 0 0
**** **** ********* ********** **** ********** ******** **** ****** ****** ***** *** ******* ****** *** 494 0 0
**** **** ********* ********** **** ********** ******** **** ****** ****** ***** *** ******* ****** *** 664 0 0
**** **** ********* ********** **** ********** ******** **** ****** ****** ***** *** ******* ****** *** 826 0 0
**** **** ********* ********** **** ********** ******** **** ****** ****** ***** *** ******* ****** *** 988 0 0
**** **** ********* ********** **** ********** ******** **** ****** ****** ***** *** ******* ****** *** 1150 0 0
**** **** ********* ********** **** ********** ******** **** ****** ****** ***** *** ******* ****** *** 1312 0 0
Подскажите что не правильно?
#include <TinyGPS.h>
/* This sample code demonstrates the normal use of a TinyGPS object.
It requires the use of SoftwareSerial, and assumes that you have a
4800-baud serial GPS device hooked up on pins 4(rx) and 3(tx).
*/
TinyGPS gps;
/*
static void smartdelay(unsigned long ms);
static void print_float(float val, float invalid, int len, int prec);
static void print_int(unsigned long val, unsigned long invalid, int len);
static void print_date(TinyGPS &gps);
static void print_str(const char *str, int len);
*/
static void gpsdump(TinyGPS &gps);
static bool feedgps();
static void print_float(float val, float invalid, int len, int prec);
static void print_int(unsigned long val, unsigned long invalid, int len);
static void print_date(TinyGPS &gps);
static void print_str(const char *str, int len);
void setup()
{
Serial.begin(9600);
Serial1.begin(9600);
Serial.print("Testing TinyGPS library v. "); Serial.println(TinyGPS::library_version());
Serial.println("by Mikal Hart");
Serial.println();
Serial.println("Sats HDOP Latitude Longitude Fix Date Time Date Alt Course Speed Card Distance Course Card Chars Sentences Checksum");
Serial.println(" (deg) (deg) Age Age (m) --- from GPS ---- ---- to London ---- RX RX Fail");
Serial.println("-------------------------------------------------------------------------------------------------------------------------------------");
}
void loop()
{
float flat, flon;
unsigned long age, date, time, chars = 0;
unsigned short sentences = 0, failed = 0;
static const double LONDON_LAT = 51.508131, LONDON_LON = -0.128002;
print_int(gps.satellites(), TinyGPS::GPS_INVALID_SATELLITES, 5);
print_int(gps.hdop(), TinyGPS::GPS_INVALID_HDOP, 5);
gps.f_get_position(&flat, &flon, &age);
print_float(flat, TinyGPS::GPS_INVALID_F_ANGLE, 10, 6);
print_float(flon, TinyGPS::GPS_INVALID_F_ANGLE, 11, 6);
print_int(age, TinyGPS::GPS_INVALID_AGE, 5);
print_date(gps);
print_float(gps.f_altitude(), TinyGPS::GPS_INVALID_F_ALTITUDE, 7, 2);
print_float(gps.f_course(), TinyGPS::GPS_INVALID_F_ANGLE, 7, 2);
print_float(gps.f_speed_kmph(), TinyGPS::GPS_INVALID_F_SPEED, 6, 2);
print_str(gps.f_course() == TinyGPS::GPS_INVALID_F_ANGLE ? "*** " : TinyGPS::cardinal(gps.f_course()), 6);
print_int(flat == TinyGPS::GPS_INVALID_F_ANGLE ? 0xFFFFFFFF : (unsigned long)TinyGPS::distance_between(flat, flon, LONDON_LAT, LONDON_LON) / 1000, 0xFFFFFFFF, 9);
print_float(flat == TinyGPS::GPS_INVALID_F_ANGLE ? TinyGPS::GPS_INVALID_F_ANGLE : TinyGPS::course_to(flat, flon, LONDON_LAT, LONDON_LON), TinyGPS::GPS_INVALID_F_ANGLE, 7, 2);
print_str(flat == TinyGPS::GPS_INVALID_F_ANGLE ? "*** " : TinyGPS::cardinal(TinyGPS::course_to(flat, flon, LONDON_LAT, LONDON_LON)), 6);
gps.stats(&chars, &sentences, &failed);
print_int(chars, 0xFFFFFFFF, 6);
print_int(sentences, 0xFFFFFFFF, 10);
print_int(failed, 0xFFFFFFFF, 9);
Serial.println();
smartdelay(1000);
}
static void smartdelay(unsigned long ms)
{
unsigned long start = millis();
do
{
while (Serial1.available())
gps.encode(Serial1.read());
} while (millis() - start < ms);
}
static void print_float(float val, float invalid, int len, int prec)
{
if (val == invalid)
{
while (len-- > 1)
Serial.print('*');
Serial.print(' ');
}
else
{
Serial.print(val, prec);
int vi = abs((int)val);
int flen = prec + (val < 0.0 ? 2 : 1); // . and -
flen += vi >= 1000 ? 4 : vi >= 100 ? 3 : vi >= 10 ? 2 : 1;
for (int i=flen; i<len; ++i)
Serial.print(' ');
}
smartdelay(0);
}
static void print_int(unsigned long val, unsigned long invalid, int len)
{
char sz[32];
if (val == invalid)
strcpy(sz, "*******");
else
sprintf(sz, "%ld", val);
sz[len] = 0;
for (int i=strlen(sz); i<len; ++i)
sz[i] = ' ';
if (len > 0)
sz[len-1] = ' ';
Serial.print(sz);
smartdelay(0);
}
static void print_date(TinyGPS &gps)
{
int year;
byte month, day, hour, minute, second, hundredths;
unsigned long age;
gps.crack_datetime(&year, &month, &day, &hour, &minute, &second, &hundredths, &age);
if (age == TinyGPS::GPS_INVALID_AGE)
Serial.print("********** ******** ");
else
{
char sz[32];
sprintf(sz, "%02d/%02d/%02d %02d:%02d:%02d ",
month, day, year, hour, minute, second);
Serial.print(sz);
}
print_int(age, TinyGPS::GPS_INVALID_AGE, 5);
smartdelay(0);
}
static void print_str(const char *str, int len)
{
int slen = strlen(str);
for (int i=0; i<len; ++i)
Serial.print(i<slen ? str[i] : ' ');
smartdelay(0);
}
/*
static void print_str(const char *str, int len)
{
int slen = strlen(str);
for (int i=0; i<len; ++i)
{
// Serial.print(" fer ");
Serial.print(i<slen ? str[i] : ' ');
}
feedgps();
}
static bool feedgps()
{
while (Serial1.available())
{
if (gps.encode(Serial1.read()))
return true;
}
return false;
}
*/
Вы где пробуете? У меня дома, например, ГПС сигнал практически отсутствует. Когда ГПС синхронизируется то начинает моргать СД на плате. У вас моргает?
Я, кстати, не помню почему, пользовал с этим модулем другую библиотеку и переделал из нее пример - рабочий.
// This example illustates basic use of the NMEA library. // It assumes that a GPS receiver is connected to serial // port 'Serial1' at 4800 bps, and that a LED is connected // to digital i/o pin 0. // // A GPS data connection of type GPRMC is created, and // used to get distance to a destination. If the distance // is under 500 meters, the LED lights up, otherwise it // is off. #include <nmea.h> NMEA gps(GPRMC); // GPS data connection to GPRMC sentence type // destination coordinates in degrees-decimal float dest_latitude = 60.000342; float dest_longitude = 30.294522; void setup() { Serial.begin(9600); Serial1.begin(9600); pinMode(0, OUTPUT); } void loop() { if (Serial1.available() > 0 ) { // read incoming character from GPS char c = Serial1.read(); // check if the character completes a valid GPS sentence if (gps.decode(c)) { // check if GPS positioning was active if (gps.gprmc_status() == 'A') { // read distance to destination in meters and set led accordingly if (gps.gprmc_distance_to(dest_latitude, dest_longitude, MTR) < 500.0) { digitalWrite(0, HIGH); } else { digitalWrite(0, LOW); } Serial.print ("Sentence = "); Serial.println (gps.gprmc_distance_to(dest_latitude, dest_longitude, MTR)); } } } }нет не моргает. Вы имеете в виде СД PWR, он единственный на плате.
Спасибо все заработало :)
Интересное дело, после того как отработала ваша программа, заработал и TinyGPS :)