1 de abril de 2022

Cartão de memória Micro SD no Arduino

Salvar todas as informações em arquivo de log em cartão Micro SD é muito importante para determinados projetos.

Um arquivo mantendo o histórico de retorno de todos os sensores do circuito e outro com as informações dos atuadores são exemplos úteis.

A comunicação do microcontrolador com o módulo do cartão de memória é através do protocolo SPI (Serial Peripheral Interface).

As bibliotecas necessárias já estão incluídas por padrão na IDE Arduino.

Para mais informações sobre a utilização:

Para listar os arquivos salvos, ler os conteúdos, criar novos arquivos, deixo os exemplos no código fonte.

 


  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
/*---------------------------------------------------------
  Programa : CARTÃO DE MEMÓRIA MICRO SD
  Autor    : Fellipe Couto [ http://www.efeitonerd.com.br ]
  Data     : 21/02/2022
  ---------------------------------------------------------*/
#include <SPI.h> //https://github.com/arduino/ArduinoCore-avr/tree/master/libraries/SPI
#include <SD.h>  //https://github.com/arduino-libraries/SD
#define SD_PIN 4

void setup() {
  int t1 = 500;
  int t2 = 3000;
  Serial.begin(115200);
  delay(t1);
  Serial.println("CARTAO DE MEMORIA MICROSD");
  Serial.println("www.efeitonerd.com.br");
  delay(t1);

  //Inicializa o MicroSD e, se houve erro, finaliza o setup
  Serial.println("\n- Inicializando MicroSD...");
  if (!SD.begin(SD_PIN)) {
    Serial.println("- Falha na inicializacao ou MicroSD nao encontrado.");
    return;
  } else {
    Serial.println("- OK!");
    delay(t1);
  }

  Serial.println("\nEscreve os arquivos SITE.txt e NUMBERS.txt\n");
  delay(t2);

  writeSD("Acesse o site para mais projetos!", "SITE.txt", false); //Sobrescreve o arquivo caso já exista
  delay(t2);

  writeSD("http://www.efeitonerd.com.br", "SITE.txt", true); //Adiciona nova linha no arquivo. Cria novo arquivo caso não exista
  delay(t2);

  writeSD("1234567890", "NUMBERS.txt", false);
  delay(t2);

  Serial.println("\nVisualiza o conteudo do arquivo NUMBERS.txt:\n");
  delay(t2);
  
  readSD("NUMBERS.txt");
  delay(t2);

  Serial.println("Visualiza o conteudo do arquivo SITE.txt\n");
  delay(t2);
  
  readSD("SITE.txt");
  delay(t2);

  Serial.println("\nLista os arquivos do MicroSD");
  listFiles();
  delay(t2);

  Serial.println("\nApaga o arquivo NUMBERS.txt");
  deleteSD("NUMBERS.txt");
  delay(t2);

  Serial.println("\nLista novamente os arquivos do MicroSD");
  listFiles();
  delay(t2);

  Serial.println("\nFIM");
}

void loop() {
}

/*--- ESCREVE O ARQUIVO ---*/
bool writeSD(String values, String file, bool appending) {
  Serial.println("- Writing file: " + file);
  Serial.println("- Values: " + values);
  if (!appending) {
    if (SD.exists(file)) SD.remove(file);
  }
  File wFile = SD.open(file, FILE_WRITE);
  if (!wFile) {
    Serial.println("- Failed to write file.");
    return false;
  }
  wFile.println(values);
  wFile.close();
  Serial.println("- Written!");
  return true;
}

/*--- LEITURA DO ARQUIVO ---*/
String readSD(String file) {
  Serial.println("- Reading file: " + file);
  String values;
  File rFile = SD.open(file);
  if (rFile) {
    while (rFile.available()) {
      values += rFile.readString();
    }
    rFile.close();
    Serial.println("- File values: " + values);
  } else {
    Serial.println("- Failed to open file.");
  }
  return values;
}

/*--- APAGA O ARQUIVO ---*/
bool deleteSD(String file) {
  Serial.println("- Deleting file: " + file);
  if (!SD.exists(file)) {
    Serial.println("- File not found.");
    return false;
  }
  SD.remove(file);
  if (SD.exists(file)) {
    Serial.println("- Delete failed.");
    return false;
  }
  Serial.println("- File deleted!");
  return true;
}

/*--- LISTA OS ARQUIVOS DO MICROSD ---*/
void listFiles() {
  Serial.println("- Listing files...");
  File rFile = SD.open("/");
  while (true) {
    File entry = rFile.openNextFile();
    if (!entry) {
      rFile.close();
      entry.close();
      break;
    }
    Serial.print(entry.name());
    Serial.print("\t");
    Serial.print(entry.size(), DEC);
    Serial.println(" bytes");
  }
}

Nenhum comentário:

Postar um comentário