I am currently trying to display the received data from the NEO-6M GPS module on an OLED with Arduino UNO.
I have launched the following Sample 1 program, and I am able to receive the desired GPS data as shown on the serial monitor.
---Sample1
#include <TinyGPS++.h>
#include <SoftwareSerial.h>
const int P_RX = 8; // for SoftwareSerial RX
const int P_TX = 7; // for SoftwareSerial TX
TinyGPSPlus gps;
SoftwareSerial mySS(P_RX, P_TX);
void setup() {
Serial.begin(9600); // Serial Speed
mySS.begin(9600); // SoftwareSerial Speed
}
void loop() {
while (mySS.available() > 0){
gps.encode(mySS.read());
display_monitor();
}
}
void display_monitor() {
if (gps.location.isUpdated()) {
Serial.print("GPS Time ");
Serial.print(gps.time.hour());
Serial.print(":");
Serial.print(gps.time.minute());
Serial.print(":");
Serial.println(gps.time.second());
Serial.print(" SateNum=");
Serial.println(gps.satellites.value());
Serial.print(" LNG=");
Serial.print(gps.location.lng(), 6);
Serial.println(" ");
}
}
Serial Log
GPS Time 0:8:48
SateNum=8
LNG=140.880020
GPS Time 0:8:49
SateNum=8
LNG=140.880035
GPS Time 0:8:49
SateNum=8
LNG=140.880035
GPS Time 0:8:50
SateNum=8
LNG=140.880035
The following Sample 2 program is intended to display the GPS received data on the OLED. It seems that the GPS time and longitude (LNG) data are displayed correctly, but the display of the number of GPS satellites is always zero.
---Sample2
#include <TinyGPS++.h>
#include <SoftwareSerial.h>
const int P_RX = 8; // for SoftwareSerial RX
const int P_TX = 7; // for SoftwareSerial TX
TinyGPSPlus gps;
SoftwareSerial mySS(P_RX, P_TX);
#include<Wire.h>
#include<Adafruit_GFX.h>
#include<Adafruit_SSD1306.h>
#define OLED_RST -1
#define OLED_WIDTH 128
#define OLED_HEIGHT 64
Adafruit_SSD1306 display(OLED_WIDTH, OLED_HEIGHT, &Wire, OLED_RST);
void setup() {
Serial.begin(9600); // Serial Speed
mySS.begin(9600); // SoftwareSerial Speed
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.setTextSize(1);
display.setTextColor(WHITE);
display.clearDisplay();
}
void loop() {
while (mySS.available() > 0){
gps.encode(mySS.read());
//display_monitor();
display_OLED();
}
}
void display_monitor() {
if (gps.location.isUpdated()) {
Serial.print("GPS Time ");
Serial.print(gps.time.hour());
Serial.print(":");
Serial.print(gps.time.minute());
Serial.print(":");
Serial.println(gps.time.second());
Serial.print(" SateNum=");
Serial.println(gps.satellites.value());
Serial.print(" LNG=");
Serial.print(gps.location.lng(), 6);
//Serial.print(" ALT=");
//Serial.print(gps.altitude.meters());
//Serial.print(" SPEED=");
//Serial.print(gps.speed.kmph());
Serial.println(" ");
}
}
void display_OLED() {
if (gps.location.isUpdated()) {
display.clearDisplay();
display.setCursor(0,0);
display.println("GPS Time");
display.print(gps.time.hour());
display.print(":");
display.print(gps.time.minute());
display.print(":");
display.println(gps.time.second());
display.print(" SateNum=");
display.println(gps.satellites.value());
display.print(" LNG=");
display.println(gps.location.lng(), 6);
display.display();
}
}
When operated together with the OLED, the data for the number of GPS satellites seems to become abnormal, but I cannot understand the cause.
Could you please instruct me on how to address this issue?