cartão SD#
Introdução#
A classe sdcard é derivada da classe base brain e fornece acesso aos ficheiros armazenados num cartão SD amovível inserido no V5 Brain.
Utilizando o cartão SD, o seu robô pode carregar dados como imagens, ler e escrever ficheiros e armazenar informações para utilização posterior ou transferência para um computador.
Access#
Brain.SDcard
Notes#
O V5 Brain suporta cartões SD até 32 GB.
O cartão SD deve ser formatado em FAT32.
Os cartões SD com capacidade superior a 32 GB são normalmente formatados em exFAT, que não é compatível com o V5 Brain.
Todos os ficheiros devem ser colocados no diretório raiz do cartão SD para serem acessíveis.
O cartão SD deve ser inserido no Brain antes que as operações de arquivo possam ser realizadas.
Os nomes e caminhos dos ficheiros são sensíveis a maiúsculas e minúsculas.
Example#
/* This constructor is required when using VS Code.
A Brain is generated automatically at the start of
VEXcode projects. */
// Create the V5 Brain
brain Brain = brain();
// Add more text and display file size
if (Brain.SDcard.exists("Text.txt")) {
// Get the size of the file
int fileSize = Brain.SDcard.size("Text.txt");
// Make a buffer to hold the file data
uint8_t buffer[fileSize];
// Load the file from the SD card into the buffer
Brain.SDcard.loadfile("Text.txt", buffer, sizeof(buffer));
// Display the file contents on the screen
Brain.Screen.print("%s", buffer);
}
Funções de membro#
A classe sdcard inclui as seguintes funções membro:
loadfile— Carrega o conteúdo de um ficheiro do cartão SD para um buffer de memória fornecido pelo utilizador.savefile— Guarda os dados de um buffer fornecido pelo utilizador num ficheiro no cartão SD do V5 Brain.appendfile— Anexa os dados de um buffer fornecido pelo utilizador ao final de um ficheiro existente no cartão SD do V5 Brain.isInserted— Retorna se um cartão SD está inserido no Brain.size— Retorna o tamanho de um ficheiro armazenado no cartão SD do V5 Brain.exists— Retorna se existe um ficheiro com o nome especificado no cartão SD do V5 Brain.
Os ficheiros . bmp e . png armazenados no cartão SD podem ser apresentados no ecrã V5 Brain utilizando drawImageFromFile, que é acedido através de Brain.Screen.
Antes de chamar qualquer função membro sdcard , deve ser criada uma instância brain , como se mostra abaixo:
// Create the V5 Brain
brain Brain = brain();
loadfile#
Carrega o conteúdo de um ficheiro do cartão SD para um buffer de memória fornecido pelo utilizador.
Available Functionsint32_t loadfile(
const char* name,
uint8_t* buffer,
int32_t len );
Parâmetro |
Tipo |
Descrição |
|---|---|---|
|
|
O nome do ficheiro a carregar do cartão SD. O nome do ficheiro deve incluir a extensão. |
|
|
Um ponteiro para um buffer onde os dados do ficheiro serão armazenados. |
|
|
O número máximo de bytes a ler do ficheiro, normalmente definido como o tamanho do buffer. |
Retorna um valor int32_t que representa o número de bytes lidos com sucesso do ficheiro:
Um valor positivo indica quantos bytes foram carregados para o buffer.
0indica que não foram lidos dados.
Se o ficheiro for superior a
len, apenas os primeiroslenbytes serão lidos.O buffer deve ser suficientemente grande para armazenar os dados solicitados.
Esta função lê bytes em bruto e não adiciona um terminador nulo.
// Check for SD card and show a file's text
if (Brain.SDcard.isInserted()) {
// Create a message to save to the SD card
uint8_t message[] = "Hello from VEX!";
// Save the message into "Text.txt"
Brain.SDcard.savefile("Text.txt", message, sizeof(message));
// Get the size of the file
int fileSize = Brain.SDcard.size("Text.txt");
// Make a buffer to hold the file data
uint8_t buffer[fileSize];
// Load the file from the SD card into the buffer
Brain.SDcard.loadfile("Text.txt", buffer, sizeof(buffer));
// Display the file contents on the screen
Brain.Screen.print("%s", buffer);
} else {
Brain.Screen.print("Insert SD card");
}
savefile#
Guarda os dados de um buffer fornecido pelo utilizador num ficheiro no cartão SD do V5 Brain.
Available Functionsint32_t savefile(
const char* name,
uint8_t* buffer,
int32_t len );
Parâmetro |
Tipo |
Descrição |
|---|---|---|
|
|
O nome do ficheiro a guardar como uma string. O nome do ficheiro deve incluir a extensão. |
|
|
Um ponteiro para um buffer de memória contendo os dados a escrever no ficheiro. |
|
|
O número de bytes a gravar do buffer para o ficheiro. |
Retorna um int32_t int32_t que representa o número de bytes gravados com sucesso no ficheiro:
Um valor positivo indica quantos bytes foram poupados.
0indica que não foram gravados dados.
Se o ficheiro for superior a
len, apenas os primeiroslenbytes serão lidos.Se já existir um ficheiro com o mesmo nome, este será sobrescrito.
Esta função não aloca memória; o buffer deve ser criado e gerido pelo utilizador.
A função escreve bytes em bruto e não adiciona um terminador nulo.
// Check for SD card and show a file's text
if (Brain.SDcard.isInserted()) {
// Create a message to save to the SD card
uint8_t message[] = "Hello from VEX!";
// Save the message into "Text.txt"
Brain.SDcard.savefile("Text.txt", message, sizeof(message));
// Get the size of the file
int fileSize = Brain.SDcard.size("Text.txt");
// Make a buffer to hold the file data
uint8_t buffer[fileSize];
// Load the file from the SD card into the buffer
Brain.SDcard.loadfile("Text.txt", buffer, sizeof(buffer));
// Display the file contents on the screen
Brain.Screen.print("%s", buffer);
} else {
Brain.Screen.print("Insert SD card");
}
appendfile#
Adiciona dados de um buffer fornecido pelo utilizador no final de um ficheiro existente no cartão SD do V5 Brain.
Available Functionsint32_t appendfile(
const char* name,
uint8_t* buffer,
int32_t len );
Parâmetro |
Tipo |
Descrição |
|---|---|---|
|
|
O nome do ficheiro no qual os dados serão adicionados no cartão SD. O nome do ficheiro deve incluir a extensão. |
|
|
Um ponteiro para um buffer de memória contendo os dados a anexar ao ficheiro. |
|
|
O número de bytes a anexar do buffer ao ficheiro. |
Retorna um valor int32_t que representa o número de bytes anexados com sucesso ao ficheiro:
Um valor positivo indica quantos bytes foram adicionados.
0indica que não foram adicionados dados.
Se o ficheiro for superior a
len, apenas os primeiroslenbytes serão lidos.O ficheiro já deve existir no cartão SD; esta função não cria um novo ficheiro.
Esta função não aloca memória; o buffer deve ser criado e gerido pelo utilizador.
A função concatena bytes em bruto e não adiciona um terminador nulo.
// Create a message to save to a new file
uint8_t message[] = "Hello";
// Save only the characters, not the null terminator
Brain.SDcard.savefile("Message.txt", message, sizeof(message) - 1);
// Load the file
int fileSize = Brain.SDcard.size("Message.txt");
uint8_t buffer[fileSize + 1];
Brain.SDcard.loadfile("Message.txt", buffer, fileSize);
// Add null terminator so it can be printed safely
buffer[fileSize] = 0;
Brain.Screen.print("%s\n", buffer);
// Create more text to append to the same file
uint8_t moreText[] = " World!";
// Append only the characters, not the null terminator
Brain.SDcard.appendfile("Message.txt", moreText, sizeof(moreText) - 1);
// Load the updated file
fileSize = Brain.SDcard.size("Message.txt");
uint8_t buffer2[fileSize + 1];
Brain.SDcard.loadfile("Message.txt", buffer2, fileSize);
// Add null terminator
buffer2[fileSize] = 0;
Brain.Screen.newLine();
Brain.Screen.print("%s", buffer2);
isInserted#
Retorna se um cartão SD está inserido no V5 Brain.
Available Functionsbool isInserted();
Esta função não aceita qualquer parâmetro.
Return ValuesRetorna um valor booleano indicando se está introduzido um cartão SD:
true— Um cartão SD está inserido no V5 Brain.false— Nenhum cartão SD inserido.
Esta função apenas verifica a presença de um cartão SD; não verifica se o cartão está formatado ou legível.
// Check for SD card and show a file's text
if (Brain.SDcard.isInserted()) {
// Create a message to save to the SD card
uint8_t message[] = "Hello from VEX!";
// Save the message into "Text.txt"
Brain.SDcard.savefile("Text.txt", message, sizeof(message));
// Get the size of the file
int fileSize = Brain.SDcard.size("Text.txt");
// Make a buffer to hold the file data
uint8_t buffer[fileSize];
// Load the file from the SD card into the buffer
Brain.SDcard.loadfile("Text.txt", buffer, sizeof(buffer));
// Display the file contents on the screen
Brain.Screen.print("%s", buffer);
} else {
Brain.Screen.print("Insert SD card");
}
size#
Retorna o tamanho de um ficheiro armazenado no cartão SD do V5 Brain.
Available Functionsint32_t size(
const char* name );
Parâmetro |
Tipo |
Descrição |
|---|---|---|
|
|
O nome do ficheiro no cartão SD. O nome do ficheiro deve incluir a extensão. |
Retorna um int32_t int32_t que representa o tamanho do ficheiro em bytes:
Um valor positivo indica o tamanho do ficheiro em bytes.
0indica um ficheiro vazio ou que o ficheiro não foi encontrado.
O tamanho devolvido pode ser utilizado para alocar um buffer antes de chamar
loadfile.
// Check for SD card and show a file's text
if (Brain.SDcard.isInserted()) {
// Create a message to save to the SD card
uint8_t message[] = "Hello from VEX!";
// Save the message into "Text.txt"
Brain.SDcard.savefile("Text.txt", message, sizeof(message));
// Get the size of the file
int fileSize = Brain.SDcard.size("Text.txt");
// Make a buffer to hold the file data
uint8_t buffer[fileSize];
// Load the file from the SD card into the buffer
Brain.SDcard.loadfile("Text.txt", buffer, sizeof(buffer));
// Display the file contents on the screen
Brain.Screen.print("%s", buffer);
} else {
Brain.Screen.print("Insert SD card");
}
exists#
Retorna se existe um ficheiro com o nome especificado no cartão SD do V5 Brain.
Available Functionsbool exists(
const char* name );
Parâmetro |
Tipo |
Descrição |
|---|---|---|
|
|
O nome do ficheiro a verificar no cartão SD. O nome do ficheiro deve incluir a extensão. |
Retorna um valor booleano indicando se o ficheiro existe:
true— Existe um ficheiro com o nome especificado no cartão SD.false— Não existe nenhum ficheiro com o nome especificado.
// Add more text and display file size
if (Brain.SDcard.exists("Text.txt")) {
// Get the size of the file
int fileSize = Brain.SDcard.size("Text.txt");
// Make a buffer to hold the file data
uint8_t buffer[fileSize];
// Load the file from the SD card into the buffer
Brain.SDcard.loadfile("Text.txt", buffer, sizeof(buffer));
// Display the file contents on the screen
Brain.Screen.print("%s", buffer);
}