Arduino - Ler Configuração do Cartão SD
Neste tutorial, vamos aprender a usar o arquivo de configuração no Cartão Micro SD. Em detalhes, vamos aprender:
Salvar um arquivo config.txt no Cartão Micro SD. O arquivo contém os pares chave-valor
Ler a configuração do Cartão Micro SD e salvá-la em uma variável int
Ler a configuração do Cartão Micro SD e salvá-la em uma variável float
Ler a configuração do Cartão Micro SD e salvá-la em uma variável String
Or you can buy the following kits:
Divulgação: Alguns dos links desta seção são links de afiliado da Amazon. Podemos receber uma comissão pelas compras feitas por meio desses links, sem custo adicional para você. Agradecemos o seu apoio.
Se você ainda não conhece o Módulo de Cartão Micro SD (pinagem, como funciona, como programar ...), aprenda sobre ele no tutorial Arduino - Cartão Micro SD .
Os pares chave-valor são armazenados previamente no Cartão Micro SD de acordo com o seguinte formato:
Cada par chave-valor fica em uma linha. Em outras palavras, cada par chave-valor é separado dos outros por um caractere de nova linha
A chave e o valor são separados por um caractere =
O código do Arduino procura a chave, encontra o valor correspondente e salva o valor em uma variável. O tipo da variável pode ser int , float ou String
This image is created using Fritzing . Click to enlarge image
※ Nota:
Se você usar um shield Ethernet ou qualquer shield que tenha um slot para Cartão Micro SD, não precisa usar o Módulo de Cartão Micro SD. Basta inserir o Cartão Micro SD no slot de Cartão Micro SD do shield.
myString_1=Hello
myString_2=ArduinoGetStarted.com
myInt_1=2
myInt_2=-105
myFloat_1=0.74
myFloat_2=-46.08
Conecte o Cartão Micro SD ao PC por meio de um leitor de Cartão SD USB 3.0
Verifique se o Cartão Micro SD está formatado em FAT16 ou FAT32 (pesquise no Google como fazer)
Copie o arquivo config.txt para o diretório raiz do Cartão Micro SD
Desconecte o Cartão Micro SD do PC
Conecte o Cartão Micro SD ao Arduino por meio do Módulo de Cartão Micro SD, de acordo com o diagrama de ligação acima
Copie o código abaixo e abra com a Arduino IDE
#include <SD .h>
#define PIN_SPI_CS 4
#define FILE_NAME "config.txt"
#define KEY_MAX_LENGTH 30
#define VALUE_MAX_LENGTH 30
int myInt_1;
int myInt_2;
float myFloat_1;
float myFloat_2;
String myString_1;
String myString_2;
void setup () {
Serial .begin (9600);
if (!SD .begin (PIN_SPI_CS)) {
Serial .println (F ("SD Card failed, or not present" ));
while (1);
}
Serial .println (F ("SD Card initialized." ));
myInt_1 = SD_findInt(F ("myInt_1" ));
myInt_2 = SD_findInt(F ("myInt_2" ));
myFloat_1 = SD_findFloat(F ("myFloat_1" ));
myFloat_2 = SD_findFloat(F ("myFloat_2" ));
myString_1 = SD_findString(F ("myString_1" ));
myString_2 = SD_findString(F ("myString_2" ));
Serial .print (F ("myInt_1 = " ));
Serial .println (myInt_1);
Serial .print (F ("myInt_2 = " ));
Serial .println (myInt_2);
Serial .print (F ("myFloat_1 = " ));
Serial .println (myFloat_1);
Serial .print (F ("myFloat_2 = " ));
Serial .println (myFloat_2);
Serial .print (F ("myString_1 = " ));
Serial .println (myString_1);
Serial .print (F ("myString_2 = " ));
Serial .println (myString_2);
}
void loop () {
}
bool SD_available(const __FlashStringHelper * key) {
char value_string[VALUE_MAX_LENGTH];
int value_length = SD_findKey(key, value_string);
return value_length > 0;
}
int SD_findInt(const __FlashStringHelper * key) {
char value_string[VALUE_MAX_LENGTH];
int value_length = SD_findKey(key, value_string);
return HELPER_ascii2Int(value_string, value_length);
}
float SD_findFloat(const __FlashStringHelper * key) {
char value_string[VALUE_MAX_LENGTH];
int value_length = SD_findKey(key, value_string);
return HELPER_ascii2Float(value_string, value_length);
}
String SD_findString(const __FlashStringHelper * key) {
char value_string[VALUE_MAX_LENGTH];
int value_length = SD_findKey(key, value_string);
return HELPER_ascii2String(value_string, value_length);
}
int SD_findKey(const __FlashStringHelper * key, char * value) {
File configFile = SD .open (FILE_NAME);
if (!configFile) {
Serial .print (F ("SD Card: error on opening file " ));
Serial .println (FILE_NAME);
return ;
}
char key_string[KEY_MAX_LENGTH];
char SD_buffer[KEY_MAX_LENGTH + VALUE_MAX_LENGTH + 1];
int key_length = 0;
int value_length = 0;
PGM_P keyPoiter;
keyPoiter = reinterpret_cast<PGM_P>(key);
byte ch;
do {
ch = pgm_read_byte(keyPoiter++);
if (ch != 0)
key_string[key_length++] = ch;
} while (ch != 0);
while (configFile.available ()) {
int buffer_length = configFile.readBytesUntil ('\n' , SD_buffer, 100);
if (SD_buffer[buffer_length - 1] == '\r' )
buffer_length--;
if (buffer_length > (key_length + 1)) {
if (memcmp(SD_buffer, key_string, key_length) == 0) {
if (SD_buffer[key_length] == '=' ) {
value_length = buffer_length - key_length - 1;
memcpy(value, SD_buffer + key_length + 1, value_length);
break ;
}
}
}
}
configFile.close ();
return value_length;
}
int HELPER_ascii2Int(char *ascii, int length ) {
int sign = 1;
int number = 0;
for (int i = 0; i < length ; i++) {
char c = *(ascii + i);
if (i == 0 && c == '-' )
sign = -1;
else {
if (c >= '0' && c <= '9' )
number = number * 10 + (c - '0' );
}
}
return number * sign;
}
float HELPER_ascii2Float(char *ascii, int length ) {
int sign = 1;
int decimalPlace = 0;
float number = 0;
float decimal = 0;
for (int i = 0; i < length ; i++) {
char c = *(ascii + i);
if (i == 0 && c == '-' )
sign = -1;
else {
if (c == '.' )
decimalPlace = 1;
else if (c >= '0' && c <= '9' ) {
if (!decimalPlace)
number = number * 10 + (c - '0' );
else {
decimal += ((float )(c - '0' ) / pow (10.0, decimalPlace));
decimalPlace++;
}
}
}
}
return (number + decimal) * sign;
}
String HELPER_ascii2String(char *ascii, int length ) {
String str;
str.reserve(length );
str = "" ;
for (int i = 0; i < length ; i++) {
char c = *(ascii + i);
str += String (c);
}
return str;
}
∞
Newbiely | Arduino IDE 2.3.8
8
Serial .println ("Hello World!" );
Message (Enter to send message to 'Arduino Uno' on 'COM15')
SD Card initialized.
myInt_1 = 2
myInt_2 = -105
myFloat_1 = 0.74
myFloat_2 = -46.08
myString_1 = Hello
myString_2 = ArduinoGetStarted.com
Ln 11, Col 1
Arduino Uno on COM15
2
Agora você pode modificar o código para adicionar mais variáveis.
※ Nota:
O código acima não se importa com a ordem dos pares chave-valor. Ele procura a chave do início ao fim do arquivo até encontrar a chave correspondente.
※ NOSSAS MENSAGENS
Fique à vontade para compartilhar o link deste tutorial. Porém, por favor, não use nosso conteúdo em outros sites. Investimos muito esforço e tempo para criar este conteúdo, por favor respeite nosso trabalho!