Во-первых, вам необходимо постоянно передавать последовательные данные (символы) в ваш объект fix
, поэтому вам нужно удалить delay(1000)
из вашего цикла.
Во-вторых, вам нужно проверить, находится ли местоположениедействителен, а затем записать их на SD.
#include <SPI.h>
#include <SD.h>
#include <Wire.h>
#include <avr/wdt.h>
#include "BlueDot_BME680.h"
BlueDot_BME680 bme680 = BlueDot_BME680();
#include <NMEAGPS.h>
#include <GPSport.h>
#include <Streamers.h>
static const int RXPin = 2, TXPin = 3;
static const uint32_t GPSBaud = 9600;
NMEAGPS gps;
gps_fix fix;
File myFile;
void setup()
{
//*********************** serielle kommunikation
Wire.begin();
Serial.begin(9600);
gpsPort.begin(GPSBaud);
if (!SD.begin(4))
{
return;
}
bme680.parameter.I2CAddress = 0x76; //Choose I2C Address
bme680.parameter.sensorMode = 0b01; //Default sensor mode
bme680.parameter.IIRfilter = 0b100; //Setting IIR Filter coefficient (15 default,0 off, 127 max)
bme680.parameter.humidOversampling = 0b101; //Setting Humidity Oversampling factor (16 default,0 disable humidity meas.)
bme680.parameter.tempOversampling = 0b101; //Setting Temperature Oversampling factor (16 default, 0 disable)
bme680.parameter.pressOversampling = 0b101; //Setting Pressure Oversampling factor (16 default,0 disable)
bme680.parameter.pressureSeaLevel = 1013.25; //default value of 1013.25 hPa
bme680.parameter.tempOutsideCelsius = 15; //default 15°C, current average outside temp to calculate altitude
bme680.parameter.target_temp = 320; // gas sensor hot plate temp (320C default, 200C min, 400C max)
// open the file. note that only one file can be open at a time,
// so you have to close this one before opening another.
bme680.writeCTRLMeas();
myFile = SD.open("sensor.txt", FILE_WRITE);
if (myFile)
{
// print the headings for our data
myFile.println("Time,Sat,Lat,Lng,Alt,Temp,Hum,Press");
}
myFile.close();
}
void sensor()
{
bme680.writeCTRLMeas();
myFile = SD.open("sensor.txt", FILE_WRITE);
if (myFile)
{
myFile.print(fix.dateTime);
myFile.print(',');
myFile.print(fix.satellites);
myFile.print(',');
myFile.print(fix.latitude(), 6);
myFile.print(',');
myFile.print(fix.longitude(), 6);
myFile.print(',');
myFile.print(fix.altitude());
myFile.print(',');
myFile.print(bme680.readTempC());
myFile.print(',');
myFile.print(bme680.readHumidity());
myFile.print(',');
myFile.print(bme680.readPressure());
myFile.println();
}
myFile.close();
}
// This is the main GPS parsing loop.
static void GPSloop()
{
while (gps.available(gpsPort))
{
fix = gps.read();
if (fix.valid.location)
sensor();
}
}
void loop()
{
GPSloop();
}