Pro Mini has no USB but perhaps you have an FTDI cable or equivalent to some kind of monitor?
I am using the FTDI breakout to communicate with my computer.
I see you have Serial which uses TX0 and RX1 pins on the board. Those are the 328P USART TX and RX pins. If you connect GPS TX to the Pro Mini RX, whatever is connected to the Pro Mini Serial will also get that signal at what baud rate?
Your question here can help me to express more exactly what I need: I used the following code to verify that the GPS does send the correct data, and that it works at 57600. The code uses the library TinyGPS.h, which parses the NMEA GPS data to a nice table with latitude, longitude, etc, that confirms the right data position is being generated. This one works because it uses the RXI pin connected to the GPS TX, for this work this way all I need to do is to load the program first to my Arduino Pro Mini without connecting the RXI pin to the GPS TX, and once it is loaded I go ahead and connecct this pin to the TX of the GPS and everything works very well. All this at 57600! But what I really need to do is to do exactly the same this code is doing but USING TWO DIGITAL PINS to be connected to the RX/TX of the GPS, this is exactly my problem, I cannot achieve this,
#include <SoftwareSerial.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).
*/
// GPS_LS20031_TEST_USES_MONITOR
#include <TinyGPS.h> // You will need TinyGPS from Mikal Hart's web page if you don't have it.
/* This sample code demonstrates the normal use of a TinyGPS object.
It DOES NOT requires the use of SoftwareSerial, and assumes that you have a
57600-baud serial GPS device hooked up on pins (TX) and PIN 0(RX) of your Arduino.
If you're using a MEGA you will have to use the correct RX pin for MEGA.
IF you are already using PIN 0(RX)on your Arduino for something else
then this program may not work for you.
Also you're going to need to remove the connection between your RX pin on your
Arduino and the GPS every time you programming the Arduino.
I forgot this issue a few times.
The Circuit:
Pin assignments for the LS20031 GPS:
• GPS Pin 5 (left-most when viewed from above) : No connection (or ground)
• GPS Pin 4 : to Arduino ground (GND) pin
• GPS Pin 3 : to Arduino pin 0
• GPS Pin 2 : No connection
• GPS Pin 1 (right-most when viewed from above) : to Arduino 3.3V pin
Note: you can use your own GPS with this, just make sure it output from the GPS is connected to the RX pin on your Arduino.
*/
TinyGPS gps;
// SoftwareSerial nss( RXPIN, TXPIN); // NOT NEEDED IN THIS EXAMPLE
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(57600);
//nss.begin(57600); // -- NOT NEEDED IN THIS EXAMPLE
Serial.print("Testing TinyGPS library v. "); Serial.println(TinyGPS::library_version());
Serial.println("by Mikal Hart");
Serial.println();
Serial.print("Sizeof(gpsobject) = "); Serial.println(sizeof(TinyGPS));
Serial.print("Serial Buffer size = ");Serial.println(" ?? "); //(_SS_MAX_RX_BUFF); I am not sure how to address this- comes
// directly from the RX buffer
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()
{
bool newdata = false;
unsigned long start = millis();
// Every second we print an update
while (millis() - start < 1000)
{
if (feedgps())
newdata = true;
}
gpsdump(gps);
}
static void gpsdump(TinyGPS &gps)
{
float flat, flon;
unsigned long age, date, time, chars = 0;
unsigned short sentences = 0, failed = 0;
static const float 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, 9, 5);
print_float(flon, TinyGPS::GPS_INVALID_F_ANGLE, 10, 5);
print_int(age, TinyGPS::GPS_INVALID_AGE, 5);
print_date(gps);
print_float(gps.f_altitude(), TinyGPS::GPS_INVALID_F_ALTITUDE, 8, 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);
// Ternary operation --> condition ? value_if_true : value_if_false
print_str(gps.f_course() == TinyGPS::GPS_INVALID_F_ANGLE ? "*** " : TinyGPS::cardinal(gps.f_course()), 6);
print_int(flat == TinyGPS::GPS_INVALID_F_ANGLE ? 0UL : (unsigned long)TinyGPS::distance_between(flat, flon, LONDON_LAT, LONDON_LON) / 1000, 0xFFFFFFFF, 9);
print_float(flat == TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : TinyGPS::course_to(flat, flon, 51.508131, -0.128002), 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();
}
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);
feedgps();
}
static void print_float(float val, float invalid, int len, int prec)
{
char sz[32];
if (val == invalid)
{
strcpy(sz, "*******");
sz[len] = 0;
if (len > 0)
sz[len-1] = ' ';
for (int i=7; i<len; ++i)
sz[i] = ' ';
Serial.print(sz);
}
else
{
Serial.print(val, prec);
int vi = abs((int)val);
// Ternary operation >>condition ? value_if_true : value_if_false
int flen = prec + (val < 0.0 ? 2 : 1);
flen += vi >= 1000 ? 4 : vi >= 100 ? 3 : vi >= 10 ? 2 : 1;
for (int i=flen; i<len; ++i)
Serial.print(" ");
}
feedgps();
}
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);
feedgps();
}
static void print_str(const char *str, int len)
{
int slen = strlen(str);
for (int i=0; i<len; ++i) // Ternary operation --> condition ? value_if_true : value_if_false
Serial.print(i<slen ? str[i] : ' ');
feedgps();
}
static bool feedgps()
{
while (Serial.available())
{
if (gps.encode(Serial.read()));
}
return false;
}
Can the GPS run fine at 38400 instead of 57600 baud? If you have an FTDI cable, can you breadboard it straight to the GPS serial? Also, the GPS is 5V?
By now you can tell that my GPS and everything is working at 3V and at 57600 which is what Sparkfun, the provided suggests in this web page: https://www.sparkfun.com/products/8975
Please continue to help me with this, I really need any help.