Help with combing code ! - Uni Project

Thank you for your help Pert! I'm new to the community and have only ever done quite simple things with the Arduino. But thanks for your advice I'll remember to do that next time. I have also added the codes to my original post.

As requested please find my attempt below. (It's probably a mess as I am almost clueless on how I would combine this type of code) I also understand that not all of the code is necessary but any help would be appreciated.

<OneSheeld.h> 1Sheeld - All Arduino shields on your Smartphone
<SD.h> and others https://www.waveshare.com/wiki/2.8inch_TFT_Touch_Shield#Arduino_Demo

/#include <OneSheeld.h> 

#include <SD.h>
#include <SPI.h>

#include "LCD.h"
#include "XPT2046.h"


#define MAX_BMP         10                      // bmp file num
#define FILENAME_LEN    20                      // max file name length

#define CUSTOM_SETTINGS
#define INCLUDE_VOICE_RECOGNIZER_SHIELD




/* Voice commands set by the user. */
const char onCommand[] = "on";
const char offCommand[] = "off";
const int PIN_SD_CS = 5;                        // pin of sd card

const int __Gnbmp_height = 320;                 // bmp hight
const int __Gnbmp_width  = 240;                 // bmp width

unsigned char __Gnbmp_image_offset  = 0;        // offset

int __Gnfile_num = 4;                           // num of file

char __Gsbmp_files[4][FILENAME_LEN] =           // add file name here
{
  "flower.bmp",
  "tiger.bmp",
  "tree.bmp",
  "ali.bmp",
};

File bmpFile;

void setup()

{

  /* Check if new command received. */
  if (VoiceRecognition.isNewCommandReceived())
  {
    /* Compare the on command. */
    if (!strcmp(onCommand, VoiceRecognition.getLastCommand()))
    {
      /* turn on led. */
      digitalWrite (PIN_SD_CS, HIGH);
    }
    /* Compare the off command. */
    else if (!strcmp(offCommand, VoiceRecognition.getLastCommand()))
    {
      /* turn off display */
      digitalWrite (PIN_SD_CS, LOW);
    }

  }
  /* Start Communication. */
  OneSheeld.begin();
  /* Error Commands handiling. */
  VoiceRecognition.setOnError(error);

  VoiceRecognition.start();
  Serial.begin(9600);

  __XPT2046_CS_DISABLE();

  pinMode(PIN_SD_CS, OUTPUT);
  digitalWrite(PIN_SD_CS, HIGH);
  Sd2Card card;
  card.init(SPI_FULL_SPEED, PIN_SD_CS);
  if (!SD.begin(PIN_SD_CS))  {
    Serial.println("SD init failed!");
    while (1);                              // init fail, die here
  }

  SPI.setDataMode(SPI_MODE3);
  SPI.setBitOrder(MSBFIRST);
  SPI.setClockDivider(SPI_CLOCK_DIV2);
  SPI.begin();

  Tft.lcd_init();
  Tft.lcd_display_string(50, 120, (const uint8_t *)"Starting to display...", FONT_1608, RED);
  Serial.println("SD OK!");
  delay(1000);
}

void loop()
{
  for (unsigned char i = 0; i < __Gnfile_num; i++) {
    bmpFile = SD.open(__Gsbmp_files[i]);
    if (! bmpFile) {
      Serial.println("image not found");
      while (1);
    }

    if (! bmpReadHeader(bmpFile)) {
      Serial.println("bad bmp");
      return;
    }

    bmpdraw(bmpFile, 0, 0);
    bmpFile.close();
    delay(1000);
    delay(1000);
    delay(1000);
    delay(1000);
  }
}

/*********************************************/
// This procedure reads a bitmap and draws it to the screen
// its sped up by reading many pixels worth of data at a time
// instead of just one pixel at a time. increading the buffer takes
// more RAM but makes the drawing a little faster. 20 pixels' worth
// is probably a good place

#define BUFFPIXEL       60                      // must be a divisor of 240 
#define BUFFPIXEL_X3    180                     // BUFFPIXELx3

void bmpdraw(File f, int x, int y)
{
  bmpFile.seek(__Gnbmp_image_offset);

  uint32_t time = millis();

  uint8_t sdbuffer[BUFFPIXEL_X3];                 // 3 * pixels to buffer

  for (int i = 0; i < __Gnbmp_height; i++) {
    for (int j = 0; j < (240 / BUFFPIXEL); j++) {
      bmpFile.read(sdbuffer, BUFFPIXEL_X3);

      uint8_t buffidx = 0;
      int offset_x = j * BUFFPIXEL;
      unsigned int __color[BUFFPIXEL];

      for (int k = 0; k < BUFFPIXEL; k++) {
        __color[k] = sdbuffer[buffidx + 2] >> 3;                    // read
        __color[k] = __color[k] << 6 | (sdbuffer[buffidx + 1] >> 2); // green
        __color[k] = __color[k] << 5 | (sdbuffer[buffidx + 0] >> 3); // blue

        buffidx += 3;
      }

      Tft.lcd_set_cursor(offset_x, i);
      Tft.lcd_write_byte(0x22, LCD_CMD);
      __LCD_DC_SET();
      __LCD_CS_CLR();
      for (int m = 0; m < BUFFPIXEL; m ++) {
        __LCD_WRITE_BYTE(__color[m] >> 8);
        __LCD_WRITE_BYTE(__color[m] & 0xFF);
      }
      __LCD_CS_SET();
    }
  }

  Serial.print(millis() - time, DEC);
  Serial.println(" ms");
}

/* Error checking function. */
void error(byte errorData)
{
  /* Switch on error and print it on the terminal. */
  switch (errorData)
  {
    case NETWORK_TIMEOUT_ERROR: Terminal.println("Network timeout"); break;
    case NETWORK_ERROR: Terminal.println("Network Error"); break;
    case AUDIO_ERROR: Terminal.println("Audio error"); break;
    case SERVER_ERROR: Terminal.println("No Server"); break;
    case SPEECH_TIMEOUT_ERROR: Terminal.println("Speech timeout"); break;
    case NO_MATCH_ERROR: Terminal.println("No match"); break;
    case RECOGNIZER_BUSY_ERROR: Terminal.println("Busy"); break;
  }
}

boolean bmpReadHeader(File f)
{
  // read header
  uint32_t tmp;
  uint8_t bmpDepth;

  if (read16(f) != 0x4D42) {
    // magic bytes missing
    return false;
  }

  // read file size
  tmp = read32(f);
  Serial.print("size 0x");
  Serial.println(tmp, HEX);

  // read and ignore creator bytes
  read32(f);

  __Gnbmp_image_offset = read32(f);
  Serial.print("offset ");
  Serial.println(__Gnbmp_image_offset, DEC);

  // read DIB header
  tmp = read32(f);
  Serial.print("header size ");
  Serial.println(tmp, DEC);

  int bmp_width = read32(f);
  int bmp_height = read32(f);

  if (bmp_width != __Gnbmp_width || bmp_height != __Gnbmp_height)  {   // if image is not 320x240, return false
    return false;
  }

  if (read16(f) != 1)
    return false;

  bmpDepth = read16(f);
  Serial.print("bitdepth ");
  Serial.println(bmpDepth, DEC);

  if (read32(f) != 0) {
    // compression not supported!
    return false;
  }

  Serial.print("compression ");
  Serial.println(tmp, DEC);

  return true;
}

/*********************************************/
// These read data from the SD card file and convert them to big endian
// (the data is stored in little endian format!)

// LITTLE ENDIAN!
uint16_t read16(File f)
{
  uint16_t d;
  uint8_t b;
  b = f.read();
  d = f.read();
  d <<= 8;
  d |= b;
  return d;
}

// LITTLE ENDIAN!
uint32_t read32(File f)
{
  uint32_t d;
  uint16_t b;

  b = read16(f);
  d = read16(f);
  d <<= 16;
  d |= b;
  return d;
}