SD-карта#
Введение#
Класс sdcard является производным от базового класса brain и обеспечивает доступ к файлам, хранящимся на съемной SD-карте, вставленной в IQ (2-го поколения) Brain.
С помощью SD-карты ваш робот может загружать данные, такие как изображения, читать и записывать файлы, а также сохранять информацию для последующего использования или передачи на компьютер.
Access#
Brain.SDcard
Notes#
Процессор IQ (2-го поколения) поддерживает карты памяти SD объемом до 32 ГБ.
SD-карта должна быть отформатирована в формате FAT32.
SD-карты объемом более 32 ГБ обычно форматируются в exFAT, что несовместимо с процессором IQ (2-го поколения).
Для обеспечения доступности все файлы должны быть размещены в корневом каталоге SD-карты.
Перед выполнением операций с файлами необходимо вставить SD-карту в устройство Brain.
Имена файлов и пути к ним чувствительны к регистру.
Example#
/* This constructor is required when using VS Code.
A Brain is generated automatically at the start of
VEXcode projects. */
// Create the 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);
}
Функции участников#
Класс sdcard включает следующие функции-члены:
loadfile— Загружает содержимое файла с SD-карты в предоставленный пользователем буфер памяти.savefile— Сохраняет данные из предоставленного пользователем буфера в файл на SD-карте IQ (2-го поколения) Brain.appendfile— Добавляет данные из предоставленного пользователем буфера в конец существующего файла на SD-карте IQ (2-го поколения) Brain.isInserted— Возвращает значение, указывающее, вставлена ли SD-карта в Brain.size— Возвращает размер файла, хранящегося на SD-карте IQ (2-го поколения) Brain.exists— Возвращает значение true, если файл с указанным именем существует на SD-карте IQ (2-го поколения) Brain.
Файлы .bmp и .png, хранящиеся на SD-карте, можно отобразить на экране IQ (2-го поколения) Brain с помощью drawImageFromFile, доступ к которому осуществляется через Brain.Screen.
Перед вызовом любых функций-членов sdcard необходимо создать экземпляр brain , как показано ниже:
// Create the Brain
brain Brain = brain();
loadfile#
Загружает содержимое файла с SD-карты в предоставленный пользователем буфер памяти.
Available Functionsint32_t loadfile(
const char* name,
uint8_t* buffer,
int32_t len );
Параметр |
Тип |
Описание |
|---|---|---|
|
|
Имя файла для загрузки с SD-карты. Имя файла должно включать расширение файла. |
|
|
Указатель на буфер, где будут храниться данные файла. |
|
|
Максимальное количество байтов для чтения из файла, обычно равное размеру буфера. |
Возвращает значение int32_t , представляющее количество байтов, успешно прочитанных из файла:
Положительное значение указывает, сколько байтов было загружено в буфер.
0означает, что данные не были считаны.
Если размер файла превышает
len, считываются только первыеlenбайта.Буфер должен быть достаточно большим, чтобы вместить запрошенные данные.
Эта функция считывает необработанные байты и не добавляет нулевой терминатор.
// 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#
Сохраняет данные из предоставленного пользователем буфера в файл на SD-карте устройства IQ Brain (2-го поколения).
Available Functionsint32_t savefile(
const char* name,
uint8_t* buffer,
int32_t len );
Параметр |
Тип |
Описание |
|---|---|---|
|
|
Имя файла для сохранения указывается в виде строки. Имя файла должно включать расширение файла. |
|
|
Указатель на буфер в памяти, содержащий данные, которые будут записаны в файл. |
|
|
Количество байтов для записи из буфера в файл. |
Возвращает значение int32_t , представляющее количество байтов, успешно записанных в файл:
Положительное значение указывает на количество сохранённых байтов.
0означает, что данные не были записаны.
Если размер файла превышает
len, считываются только первыеlenбайта.Если файл с таким же именем уже существует, он будет перезаписан.
Эта функция не выделяет память; буфер должен быть создан и управляться пользователем.
Функция записывает необработанные байты и не добавляет нулевой терминатор.
// 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#
Добавляет данные из предоставленного пользователем буфера в конец существующего файла на SD-карте устройства IQ (2-го поколения) Brain.
Available Functionsint32_t appendfile(
const char* name,
uint8_t* buffer,
int32_t len );
Параметр |
Тип |
Описание |
|---|---|---|
|
|
Имя файла, в который будут добавляться данные на SD-карте. Имя файла должно включать расширение файла. |
|
|
Указатель на буфер в памяти, содержащий данные, которые будут добавлены в файл. |
|
|
Количество байтов, которые необходимо добавить из буфера в файл. |
Возвращает значение int32_t , представляющее количество байтов, успешно добавленных в файл:
Положительное значение указывает, сколько байтов было добавлено.
0означает, что данные не были добавлены.
Если размер файла превышает
len, считываются только первыеlenбайта.Файл должен уже существовать на SD-карте; эта функция не создает новый файл.
Эта функция не выделяет память; буфер должен быть создан и управляться пользователем.
Функция добавляет необработанные байты и не добавляет нулевой терминатор.
// 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#
Возвращает значение, указывающее, вставлена ли в данный момент SD-карта в устройство IQ (2-го поколения) Brain.
Available Functionsbool isInserted();
Эта функция не принимает никаких параметров.
Return ValuesВозвращает логическое значение, указывающее, вставлена ли SD-карта:
true— В IQ (2-го поколения) Brain вставлена SD-карта.false— SD-карта не вставлена.
Эта функция проверяет только наличие SD-карты; она не проверяет, отформатирована ли карта или читаема ли она.
// 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#
Возвращает размер файла, хранящегося на SD-карте устройства IQ (2-го поколения) Brain.
Available Functionsint32_t size(
const char* name );
Параметр |
Тип |
Описание |
|---|---|---|
|
|
Имя файла на SD-карте. Имя файла должно включать расширение файла. |
Возвращает значение int32_t (int32_t), представляющее размер файла в байтах:
Положительное значение указывает на размер файла в байтах.
0означает пустой файл или то, что файл не найден.
Возвращаемый размер можно использовать для выделения буфера перед вызовом
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#
Возвращает значение, указывающее, существует ли файл с указанным именем на SD-карте IQ (2-го поколения) Brain.
Available Functionsbool exists(
const char* name );
Параметр |
Тип |
Описание |
|---|---|---|
|
|
Имя файла для проверки на SD-карте. Имя файла должно включать расширение файла. |
Возвращает логическое значение, указывающее, существует ли файл:
true— На SD-карте существует файл с указанным именем.false— Файл с указанным именем не существует.
// 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);
}