#include "FS.h"
#include "SD.h"
#include "SPI.h"
#include "Wire.h"
// #include "MPU6050.h"
#include "RTClib.h"
#include <Adafruit_MPU6050.h>
#include <Adafruit_Sensor.h>
// MPU6050 mpu(0x69);
RTC_DS1307 rtc;
Adafruit_MPU6050 mpu;
void readFile(fs::FS &fs, const char * path){
Serial.printf("Reading file: %s\n", path);
File file = fs.open(path);
if(!file){
Serial.println("Failed to open file for reading");
return;
}
Serial.println("Read from file: ");
while(file.available()){
Serial.write(file.read());
}
file.close();
}
// Optimize the code to read the file
void oReadFile(fs::FS &fs, const char * path){
Serial.printf("Reading file: %s\n", path);
File file = fs.open(path);
if(!file){
Serial.println("Failed to open file for reading");
return;
}
Serial.println("Read from file: ");
const size_t bufferSize = 1024;
uint8_t buffer[bufferSize];
while(file.available()){
size_t bytesRead = file.read(buffer, bufferSize);
Serial.write(buffer, bytesRead);
}
file.close();
}
void writeFile(fs::FS &fs, const char * path, const char * message){
Serial.printf("Writing file: %s\n", path);
File file = fs.open(path, FILE_WRITE);
if(!file){
Serial.println("Failed to open file for writing");
return;
}
if(file.print(message)){
Serial.println("File written");
} else {
Serial.println("Write failed");
}
file.close();
}
void appendFile(fs::FS &fs, const char * path, const char * message){
Serial.printf("Appending to file: %s\n", path);
File file = fs.open(path, FILE_APPEND);
if(!file){
Serial.println("Failed to open file for appending");
return;
}
if(file.print(message)){
Serial.println("Message appended");
} else {
Serial.println("Append failed");
}
file.close();
}
void deleteFile(fs::FS &fs, const char * path){
Serial.printf("Deleting file: %s\n", path);
if(fs.remove(path)){
Serial.println("File deleted");
} else {
Serial.println("Delete failed");
}
}
char days[7][12] = {
"Domingo",
"Segunda",
"Terça",
"Quarta",
"Quinta",
"Sexta",
"Sábado"
};
void printDateTime(
int day,
int month,
int year,
int dayOfTheWeek,
int hour,
int minute,
int second
) {
if (day < 10)
Serial.print('0');
Serial.print(day);
Serial.print('/');
if (month < 10)
Serial.print('0');
Serial.print(month);
Serial.print('/');
Serial.println(year);
Serial.println(days[dayOfTheWeek]);
if (hour < 10)
Serial.print('0');
Serial.print(hour);
Serial.print(':');
if (minute < 10)
Serial.print('0');
Serial.print(minute);
Serial.print(':');
if (second < 10)
Serial.print('0');
Serial.println(second);
}
void setup(){
Serial.begin(115200);
mpu.begin(0x69);
mpu.setAccelerometerRange(MPU6050_RANGE_8_G);
mpu.setGyroRange(MPU6050_RANGE_250_DEG);
mpu.setFilterBandwidth(MPU6050_BAND_21_HZ);
Wire.begin();
Wire.beginTransmission(0x68); // Endereço I2C do RTC DS1307
if (Wire.endTransmission() == 0) {
Serial.println("RTC DS1307 encontrado.");
rtc.begin();
if (!rtc.isrunning()) {
Serial.println("RTC não está funcionando! Inicializando...");
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
} else {
Serial.println("RTC DS1307 não encontrado. Verifique as conexões.");
}
Wire.endTransmission();
// Wire.beginTransmission(0x69); // Endereço I2C do MPU-6050
// if (Wire.endTransmission() == 0) {
// Serial.println("MPU-6050 encontrado.");
// mpu.begin();
// mpu.setAccelerometerRange(MPU6050_RANGE_8_G);
// mpu.setGyroRange(MPU6050_RANGE_250_DEG);
// mpu.setFilterBandwidth(MPU6050_BAND_21_HZ);
// } else {
// Serial.println("MPU não encontrado. Verifique as conexões.");
// }
// Wire.endTransmission();
if(!SD.begin()){
Serial.println("Card Mount Failed");
return;
}
uint8_t cardType = SD.cardType();
if(cardType == CARD_NONE){
Serial.println("No SD card attached");
return;
}
Serial.print("SD Card Type: ");
if(cardType == CARD_MMC){
Serial.println("MMC");
} else if(cardType == CARD_SD){
Serial.println("SDSC");
} else if(cardType == CARD_SDHC){
Serial.println("SDHC");
} else {
Serial.println("UNKNOWN");
}
uint64_t cardSize = SD.cardSize() / (1024 * 1024);
Serial.printf("SD Card Size: %lluMB\n", cardSize);
writeFile(SD, "/hello.txt", "Hello ");
appendFile(SD, "/hello.txt", "World!\n");
appendFile(SD, "/hello.txt", "Walmir Silva dos Santos\n");
readFile(SD, "/hello.txt");
Serial.printf("Total space: %lluMB\n", SD.totalBytes() / (1024 * 1024));
Serial.printf("Used space: %lluMB\n", SD.usedBytes() / (1024 * 1024));
}
// Loop teste RTC e MPU
// void loop(){
// DateTime now = rtc.now();
// printDateTime(
// now.day(),
// now.month(),
// now.year(),
// now.dayOfTheWeek(),
// now.hour(),
// now.minute(),
// now.second()
// );
// sensors_event_t a, g, temp;
// mpu.getEvent(&a, &g, &temp);
// Serial.println("Acelerometro:");
// Serial.print(a.acceleration.x);
// Serial.print(",");
// Serial.print(a.acceleration.y);
// Serial.print(",");
// Serial.println(a.acceleration.z);
// Serial.println("Giroscopio:");
// Serial.print(g.gyro.x);
// Serial.print(",");
// Serial.print(g.gyro.y);
// Serial.print(",");
// Serial.println(g.gyro.z);
// Serial.println("");
// delay(2000);
// }
char data[20];
// Loop teste para verificar a gravação no cartão SD
void loop(){
// Variável para controlar a impressão do conteúdo do arquivo
bool printFile = false;
// Variável para observar se passou 10 segundos usando millis()
unsigned long previousPrintMillis = millis();
// Variável para observar se passou 2 segundos usando millis()
unsigned long previousWriteMillis = millis();
// Enquanto printFile for false
// Verifica se passou 10 segundos
// Usar millis() para verificar se passou 10 segundos
// Se passou, imprime o conteúdo do arquivo gravado
// Se não passou, verifica se passou 2 segundos
// Usar millis() para verificar se passou 2 segundos
// Se passou, grava no cartão SD a data e hora atual
// Se não passou, não faz nada
while (!printFile) {
// unsigned long currentMillis = millis();
if (millis() - previousPrintMillis >= 10000) {
previousPrintMillis = millis();
printFile = true;
} else if (millis() - previousWriteMillis >= 2000) {
previousWriteMillis = millis();
DateTime now = rtc.now();
sprintf(
data,
"%02d/%02d/%04d %02d:%02d:%02d\n",
now.day(),
now.month(),
now.year(),
now.hour(),
now.minute(),
now.second()
);
appendFile(SD, "/data.txt", data);
}
}
// Se printFile for true, imprime o conteúdo do arquivo gravado
oReadFile(SD, "/data.txt");
}