#include <Wire.h>
#include <SD.h>
#define LOG_FILE_NAME "altitude.log"
#define LOG_INTERVAL 300 // Log interval in milliseconds
Adafruit_BMP280 bmp; // Create BMP280 object
File logFile; // Create log file object
float maxAltitude = 0.0; // Initialize maximum altitude variable
void setup() {
Serial.begin(9600); // Start serial communication
if (!bmp.begin(0x76)) { // Initialize BMP280 with I2C address 0x76
Serial.println("Could not find a valid BMP280 sensor, check wiring!");
}
while (1);
}
if (!SD.begin(10)) { // Initialize microSD card with pin 10
Serial.println("Could not initialize SD card, check wiring!");
}
logFile = SD.open(LOG_FILE_NAME, FILE_WRITE); // Open log file for writing
logFile.println("Time,Altitude"); // Write header to log file
logFile.close();
}
void loop() {
static unsigned long lastLogTime = 0; // Initialize last log time variable
unsigned long currentTime = millis(); // Get current time in milliseconds
float temperature = bmp.readTemperature(); // Read temperature in Celsius
float pressure = bmp.readPressure() / 100.0; // Read pressure in hPa
float altitude = bmp.readAltitude(1012.7); // Read altitude in meters relative to sea level
// Update maximum altitude
if (altitude > maxAltitude) {
maxAltitude = altitude;
}
// Log altitude every 0.3 seconds
if (currentTime - lastLogTime >= LOG_INTERVAL) {
logFile = SD.open(LOG_FILE_NAME, FILE_WRITE); // Open log file for writing
logFile.print(currentTime / 1000.0); // Write time in seconds
logFile.print(",");
logFile.println(altitude); // Write altitude
logFile.close();
lastLogTime = currentTime; // Update last log time
}
delay(100); // Wait for 0.1 second before reading again
}