Skip to content

BMP file on SD-card

The BMP file on SD-card library saves the screen as a BMP file on the SD-card and loads a BMP file into the frame-buffer, ready to be displayed. Everything is performed dynamically at run-time.

Info

This method is not recommended for MCUs, as the management of the SD-card is rather slow and prone to interferences.

The BMP file on SD-card library is available on the Commercial edition. The file is RGB 5-5-5 coded.

Configure

Warning

Ensure the screen is declared and initialised according to the configuration procedure.

#include "hV_File_BMP.h"

The pre-processor statement includes the file library. It should be mentioned after the statement for the screen library.

Danger

This library requires the external SD library to manage the SD-card.

Ensure the external SD library is installed and properly configured.

File_BMP myFile(&myScreen);

The constructor File_BMP() sets the link to the screen. It should be mentioned after the constructor of the screen.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
uint8_t result = myFile.beginFileSystem(pinCS,
    portSPI,
    pinDetect,
    pinLevel);

if (result != RESULT_SUCCESS)
{
    hV_HAL_Serial_crlf();
    hV_HAL_log(LEVEL_CRITICAL, "SD-card error");
    hV_HAL_exit(0x01);
}

result = myFile.setFolder("Image");

beginFileSystem() checks an SD-card is available and initialises it.

The required parameter is

  • The first line sets the pin for selecting the SD-card.

It is easily provided with myScreen.getBoardPins().cardCS.

The optional parameters are

  • The second line sets the number of the SPI port, 0 by default;

  • The third line sets the pin for the detect signal, NOT_CONNECTED or -1 par default;

  • The fourth line sets the level of detect signal, LOW by default.

The function returns RESULT_SUCCESS if successful, RESULT_ERROR otherwise.

setFolder() sets the name of the folder for the files, and creates it if it does not exists.

By default, the files are located under the folder img.

The function returns RESULT_SUCCESS if successful, RESULT_ERROR otherwise.

Use

Save

1
2
uint8_t result = myFile.saveScreen("File_BMP",
    1);

saveScreen() saves the screen on the SD-card as a BMP file. The file is RGB 5-5-5 coded.

The function returns RESULT_SUCCESS if successful, RESULT_ERROR otherwise.

The required parameter is

  • The first line provides the name of the file without the .BMP extension.

The optional parameter is

  • The second line sets the multiplier, 1 by default.

The default value of 1 is recommended for medium and large screens, and 2 for small screens.

saveWindow() save a window on a BMP file.

The function returns RESULT_SUCCESS if successful, RESULT_ERROR otherwise.

Read

1
2
uint8_t result = myFile.readScreen("File_BMP",
    1);

readScreen() displays a BMP file from the SD-card on the frame-buffer, to be displayed with flush().

The required parameter is

  • The first line provides the name of the file without the .BMP extension.

The optional parameter is

  • The second line sets the multiplier, 1 by default.

The function doesn’t check the size or the multiplier of the image.

The function returns RESULT_SUCCESS if successful, RESULT_ERROR otherwise.

End

uint8_t result = myFile.endFileSystem();

endFileSystem() closes the SD-card.

The function returns RESULT_SUCCESS if successful, RESULT_ERROR otherwise.

Example

This is the core of the code from example File_BMP.ino.

void fileWriteReadBMP()
{
    // Initialise
    uint8_t result;
    result = myFile.beginFileSystem(5);
    if (result != RESULT_SUCCESS)
    {
        hV_HAL_log(LEVEL_ERROR, "SD-card error");
        hV_HAL_Serial_crlf();
        return;
    }

    myScreen.setOrientation(myOrientation);
    myScreen.selectFont(fontLarge);

    myScreen.clear();
    myScreen.gText(8, 8, "File BMP");
    myScreen.flushFast();

    // Write to SD-card
    result = myFile.saveScreen("File_BMP");
    wait(4);

    myScreen.clear();
    myScreen.gText(4, 4, "Reading the file back...");
    myScreen.flush();
    wait(4);

    // Read from SD-card
    myScreen.clear();
    result = myFile.readScreen("File_BMP");
    if (result == RESULT_SUCCESS)
    {
        myScreen.flush();
        wait(4);
    }
}