GPS와 기압계의 정보를 SD 카드에 CSV 파일로 저장하는 아두이노 코드이다
레오나르도같이 USB가 시리얼과 분리된 보드나 시리얼이 2개 이상인 보드가 필요하다 우노에서 활용하려면 소프트웨어 시리얼을 사용해야 한다
대충 BMP280을 I2C, SD카드를 SPI, GPS 모듈을 시리얼 단자에 연결하면 될 것이다.
#include "TinyGPS++.h"
#include <Adafruit_BMP280.h>
#include <Wire.h>
#include <SPI.h>
#include <SD.h>
TinyGPSPlus gps;
Adafruit_BMP280 bmp;
void setup() {
Serial.begin(9600);
Serial1.begin(9600);
SD.begin(10);
if (!SD.begin(10)) {
Serial.println("SD card ERROR");}
else
Serial.println("SD card ");
while(!Serial);
bmp.begin(0x76);
bmp.setSampling(Adafruit_BMP280::MODE_NORMAL, /* Operating Mode. */
Adafruit_BMP280::SAMPLING_X2, /* Temp. oversampling */
Adafruit_BMP280::SAMPLING_X16, /* Pressure oversampling */
Adafruit_BMP280::FILTER_X16, /* Filtering. */
Adafruit_BMP280::STANDBY_MS_500); /* Standby time. */
File data =SD.open("data.csv", FILE_WRITE);
data.println("hh,mm,ss,Latitude,Longitude,altitude,temp,pressure,paltitude,st,speed");
data.close();
Serial.println("hh,mm,ss,Latitude,Longitude,altitude,temp,pressure,paltitude,st,speed");
}
void loop() {
while (Serial1.available() > 0)
gps.encode(Serial1.read());
if (gps.altitude.isUpdated()){
Serial.print(gps.time.hour()); // Hour (0-23) (u8)
Serial.print(",");
Serial.print(gps.time.minute()); // Minute (0-59) (u8)
Serial.print(",");
Serial.print(gps.time.second());
Serial.print(",");
Serial.print(gps.location.lat(),6);
Serial.print(",");
Serial.print(gps.location.lng(),6);
Serial.print(",");
Serial.print(gps.altitude.meters(),6);
Serial.print(",");
Serial.print(bmp.readTemperature());
Serial.print(",");
Serial.print(bmp.readPressure()/100,6);
Serial.print(F(","));
Serial.print(bmp.readAltitude(1027));
Serial.print(",");
Serial.print(gps.satellites.value());
Serial.print(",");
Serial.println(gps.speed.mps());
File data =SD.open("data.csv", FILE_WRITE);
data.print(gps.time.hour()); // Hour (0-23) (u8)
data.print(",");
data.print(gps.time.minute()); // Minute (0-59) (u8)
data.print(",");
data.print(gps.time.second());
data.print(",");
data.print(gps.location.lat(),6);
data.print(",");
data.print(gps.location.lng(),6);
data.print(",");
data.print(gps.altitude.meters(),6);
data.print(",");
data.print(bmp.readTemperature());
data.print(",");
data.print(bmp.readPressure()/100,6);
data.print(F(","));
data.print(bmp.readAltitude(1027));
data.print(",");
data.print(gps.satellites.value());
data.print(",");
data.println(gps.speed.mps());
data.close();
}
}