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