I'm new to arduino. There is an issue in the code I wrote in my project. The issue is when GPS sensor(Adafruit ultimate gps breakout v3) finds a satellite, GPS time and coordinates values not changing. Other values are working but only GPS isnt. (You can see the output and the code below.)
#include <Adafruit_GPS.h>
#include <SoftwareSerial.h>
#include "DFRobot_BNO055.h"
#include "Wire.h"
#include <SFE_BMP180.h>
SoftwareSerial mySerial(51, 50);
Adafruit_GPS GPS(&mySerial);
typedef DFRobot_BNO055_IIC BNO;
BNO bno(&Wire, 0x28);
SFE_BMP180 pressure;
double baseline; // baseline pressure
#define GPSECHO true
#define ALTITUDE 820 // Altitude of My Home, in meters
void printLastOperateStatus(BNO::eStatus_t eStatus);
double getPressure();
void setup()
{
Serial.begin(115200);
bno.reset();
while (bno.begin() != BNO::eStatusOK)
{
Serial.println("bno begin faild");
printLastOperateStatus(bno.lastOperateStatus);
delay(500);
}
Serial.println("bno begin success");
delay(500);
GPS.begin(9600);
GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCGGA);
GPS.sendCommand(PMTK_SET_NMEA_UPDATE_1HZ);
GPS.sendCommand(PGCMD_ANTENNA);
if (pressure.begin())
Serial.println("BMP180 init success");
else
{
Serial.println("BMP180 init fail\n\n");
while (1)
; // Pause forever.
}
delay(1000);
pinMode(13, OUTPUT);
pinMode(14, OUTPUT);
pinMode(15, OUTPUT);
baseline = getPressure();
Serial.print("baseline pressure: ");
Serial.print(baseline);
Serial.println(" mb");
}
uint32_t timer = millis();
void loop()
{
char status;
double T, P, p0, a, Pv;
char c = GPS.read();
BNO::sEulAnalog_t sEul;
sEul = bno.getEul();
if ((c) && (GPSECHO))
if (GPS.newNMEAreceived())
{
if (!GPS.parse(GPS.lastNMEA()))
return;
}
if (millis() - timer > 2000)
{
timer = millis(); // reset the timer
Serial.print("<");
Serial.print("TeamID");
Serial.print(">");
//Saati if gpsfix in bi üstüne koy
Serial.print("<");
Serial.print(sEul.pitch, 3);
Serial.print(">");
Serial.print("<");
Serial.print(sEul.roll, 3);
Serial.print(">");
Serial.print("<");
Serial.print(sEul.head, 3);
Serial.print(">");
if (GPS.fix)
{
Serial.print("<");
Serial.print(GPS.hour+3, DEC);
Serial.print(':');
if (GPS.minute < 10)
{
Serial.print('0');
}
Serial.print(GPS.minute, DEC);
Serial.print(':');
if (GPS.seconds < 10)
{
Serial.print('0');
}
Serial.print(GPS.seconds, DEC);
Serial.print(">");
//buraya
Serial.print("<");
Serial.print(GPS.latitudeDegrees, 6);
Serial.print(">");
Serial.print("<");
Serial.print(GPS.longitudeDegrees, 6);
Serial.print(">");
}
Pv = getPressure();
a = pressure.altitude(Pv, baseline);
//bmp180
status = pressure.startTemperature();
if (status != 0)
{
delay(status);
status = pressure.getTemperature(T);
if (status != 0)
{
Serial.print("<");
Serial.print(T, 2);
Serial.print(">");
status = pressure.startPressure(3);
if (status != 0)
{
delay(status);
status = pressure.getPressure(P, T);
if (status != 0)
{
// Print out the measurement:
Serial.print("<");
Serial.print(P, 2);
Serial.print(">");
p0 = pressure.sealevel(P, ALTITUDE); // we're at 1655 meters (Boulder, CO)
Serial.print("<");
Serial.print(p0, 2);
Serial.print(">");
}
else
Serial.println("error retrieving pressure measurement\n");
}
else
Serial.println("error starting pressure measurement\n");
}
else
Serial.println("error retrieving temperature measurement\n");
}
else
Serial.println("error starting temperature measurement\n");
Serial.print("<");
Serial.print(a,1);
Serial.print(">");
Serial.println();
}
}
void printLastOperateStatus(BNO::eStatus_t eStatus)
{
switch (eStatus)
{
case BNO::eStatusOK:
Serial.println("everything ok");
break;
case BNO::eStatusErr:
Serial.println("unknow error");
break;
case BNO::eStatusErrDeviceNotDetect:
Serial.println("device not detected");
break;
case BNO::eStatusErrDeviceReadyTimeOut:
Serial.println("device ready time out");
break;
case BNO::eStatusErrDeviceStatus:
Serial.println("device internal status error");
break;
default:
Serial.println("unknow status");
break;
}
}
double getPressure()
{
char status;
double T,P,p0,a;
status = pressure.startTemperature();
if (status != 0)
{
delay(status);
status = pressure.getTemperature(T);
if (status != 0)
{
status = pressure.startPressure(3);
if (status != 0)
{
delay(status);
status = pressure.getPressure(P,T);
if (status != 0)
{
return(P);
}
else Serial.println("error retrieving pressure measurement\n");
}
else Serial.println("error starting pressure measurement\n");
}
else Serial.println("error retrieving temperature measurement\n");
}
else Serial.println("error starting temperature measurement\n");
}
