//codigo sem rtos
#include <Wire.h> // Inclui a biblioteca Wire usada para I2C
#include <Adafruit_BMP280.h> // Inclui a biblioteca do BMP280
#include <SPI.h> // Inclui a biblioteca SPI
#include <SD.h> // Inclui a biblioteca SD
// Define o pino do Chip Select para o Cartão SD
const int sdCS = 4;
Adafruit_BMP280 bmp; // Cria o objeto BMP
void setup() {
Serial.begin(9600);
// Inicializa o sensor BMP
if (!bmp.begin(0x76)) {//0x76 é o endereço 'genérico' para usarmos num BMP
Serial.println("Não foi possível encontrar um sensor BMP280 válido, cheque conexão");
while (1);
// Esse bloco significa: caso o BMP não inicialize ele vai travar o programa
}
// Inicializa o cartão SD
if (!SD.begin(sdCS)) {
Serial.println("Cartão falho ou não presente");
while (1);
// Esse bloco significa: caso o SD não inicialize ele vai travar o programa
}
Serial.println("Inicializada o Armazenamento de dados de Altitude");
}
void loop() {
// Lê a altitude do sensor
float altitude = bmp.readAltitude(1013.25);
float temperature = bmp.readTemperature();
float pressure = bmp.readPressure();
// Essa função 'readAltitude' vai ler em relação a pressão dada
// No caso foi fornecida a pressão do nível do mar (1013.25 hPa)
// Mas é importante frisar que para termos uma maior precisão é interessante
// Usarmos a pressão no local e para isso deve ser feito uma pesquisa sobre
// Chamada da função que vai armazenar os dados de altitude no cartão MicroSD
logAltitude(altitude, temperature, pressure);
//exibe os dados no monitor serial
Serial.print("Altitude (m): ");
Serial.println(altitude);
Serial.print("\n");
Serial.print("Temperature (C): ");
Serial.println(temperature);
Serial.print("\n");
Serial.print("Pressure (hPa): ");
Serial.println(pressure);
// Adiciona um delay de cria
delay(200); // Ajusta para a desejada amostra de dados
}
void logAltitude(float altitude, float temperature, float pressure) {
// Cria o arquivo no cartão SD
File dataFile = SD.open("dados_log.txt", FILE_WRITE);
// Checa se o arquivo foi aberto com sucesso
if (dataFile) {
// Chamada das funções que armazenam os dados
dataFile.print(altitude);
dataFile.print("\n");
dataFile.print(temperature);
dataFile.print("\n");
dataFile.print(pressure);
dataFile.print("\n");
dataFile.close();
} else {
// Caso o arquivo não abra, essa será a mensagem:
Serial.println("Erro ao abrir o arquivo para armazenar os dados");
}
}