/*############################################################################
  Autor: Mario Parente
  Projeto: Criação e leitura de arquivos no Cartão SD 
  Data: 23/06/2023
  Detalhes do projeto: Demostração de algumas funções do leitor de SD_Card
############################################################################*/

#include <SD.h>
#include <SPI.h>
 
File Arquivo;

int pinoSS = 10; // Pin 53 para Mega / Pin 10 para UNO
 
void setup() { // Executado uma vez quando ligado o Arduino
  pinMode(2, INPUT_PULLUP);
  Serial.begin(9600); // Define BaundRate
  pinMode(pinoSS, OUTPUT); // Declara pinoSS como saída
 
  if (SD.begin(pinoSS)) { // Inicializa o SD Card
    Serial.println("SD Card pronto para uso."); // Imprime na tela
  }

  else {
    Serial.println("Falha na inicialização do SD Card.");
    return;
  }

  Arquivo = SD.open("/");
  Lendo_Diretorio(Arquivo, 0);
  Escrevendo_dados();

}
 
void loop() {
 
  if (digitalRead(2) == 0) {              //se o borao for pressionado
    Serial.println("Conteúdo do Arquivo:"); // Imprime na tela
    Arquivo = SD.open("SD.txt");            // Abre o Arquivo
    while (Arquivo.available()) {           // 
      Serial.write(Arquivo.read());           //Exibe o conteúdo do Arquivo
    }
    Arquivo.close(); // Fecha o Arquivo após ler
  }

}

// Função de escreve os dado em um arquivo do Cartão..........................................................
void Escrevendo_dados(){
  Arquivo = SD.open("SD.txt", FILE_WRITE); // Cria / Abre arquivo .txt
   if (Arquivo) { // Se o Arquivo abrir imprime:
    Serial.println("Escrevendo no Arquivo"); // Imprime na tela
    Arquivo.println("");     // Pula a ultima linha do arquivo
    Arquivo.println("Escrevendo isso na ultima linha e pula para a proxima.");  //Escreve e depois pula uma linha
    Arquivo.close(); // Fecha o Arquivo após escrever
    Serial.println("Terminado."); // Imprime na tela
    Serial.println(" ");
  }
  else {     // Se o Arquivo não abrir
    Serial.println("Erro ao Abrir"); // Imprime na tela
  }
}
//.........................Fim da função.........................................................................


// Função de leitura de todos o arquivos na raiz do Cartão...............................
void Lendo_Diretorio(File dir, int numTabs) {
  while (true) {
    File entry =  dir.openNextFile();
    if (! entry) {       // sem mais arquivos
      break;
    }

    for (uint8_t i = 0; i < numTabs; i++) {
      Serial.print('\t');
    }

    Serial.print(entry.name());
    if (entry.isDirectory()) {
      Serial.println("/");
      Lendo_Diretorio(entry, numTabs + 1);
    }

    else {      // arquivos têm tamanhos, diretórios não
      Serial.print("\t\t");
      Serial.println(entry.size(), DEC);
    }
      entry.close();
  }
  Serial.println(" ");
}
//.........................Fim da função.........................................................................
uno:A5.2
uno:A4.2
uno:AREF
uno:GND.1
uno:13
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:1
uno:0
uno:IOREF
uno:RESET
uno:3.3V
uno:5V
uno:GND.2
uno:GND.3
uno:VIN
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5
oled1:GND
oled1:VCC
oled1:SCL
oled1:SDA
btn1:1.l
btn1:2.l
btn1:1.r
btn1:2.r
sd1:CD
sd1:DO
sd1:GND
sd1:SCK
sd1:VCC
sd1:DI
sd1:CS