Список файлов SD-карты на TFT-экране Arduino

У меня возникла проблема при попытке перечислить файлы на SD-карте: у меня есть следующий код:

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

#define sd_cs  4
#define lcd_cs 10
#define dc     9
#define rst    8  

TFT TFTscreen = TFT(lcd_cs, dc, rst);

PImage logo;

void intro() {
    TFTscreen.begin();
    TFTscreen.background(255, 255, 255);
    TFTscreen.stroke(0, 0, 255);
    TFTscreen.println();
    TFTscreen.println("Welcome..");
    delay(500);
}


void draw(char *imageName)  {
  TFTscreen.begin();
  TFTscreen.background(255, 255, 255);

  // Load the image file.
  logo = TFTscreen.loadImage(imageName);
  if (!logo.isValid()) {
    Serial.println("error while loading the image");
  }
  if (logo.isValid() == false) {
    return;
  }

  Serial.println("drawing image");

  // draw the image to the screen
  TFTscreen.image(logo, 0, 0);
}  

void initSD() {    
   Serial.print("Initializing SD card...");
   if (!SD.begin(sd_cs)) {
        Serial.println("failed!");
        return;
   }
   Serial.println("OK!"); 

}  

void setup() 

    Serial.begin(9600);

    intro();

    initSD();

  draw("2.bmp");
}

void loop() { }

Приведенный выше код работает нормально, на экране отображается сообщение «Добро пожаловать», за которым следует изображение «2.bmp», как и ожидалось. Последовательный вывод печатает:

IniInitializing SD card...OK!
File size: 61496
Image Offset: 54
Header size: 40
Bit Depth: 24
Image size: 128x160
drawing image

Теперь попробовал перечислить файлы в корне SD карты:

File root;
void listSD()  {
    root = SD.open("/");
    printDirectory(root);
}

void printDirectory(File dir) {
    while(true) {

        File entry =  dir.openNextFile();
        if (! entry) {
            dir.rewindDirectory();
            break;
        }

        Serial.println(entry.name());
   }
}

void setup() {
    Serial.begin(9600);

    intro();

    initSD();
    listSD(); //<- this function here

   draw("2.bmp");

}

Но я получаю сообщение об ошибке «Файл не найден» сразу после того, как указана корневая папка:

Initializing SD card...OK!
1.BMP
2.BMP
loadImage: file not found: 2.bmp
error while loading the image

Подскажите, пожалуйста, что здесь может быть не так? Я подозреваю, что root = SD.open("/"); каким-то образом влияет на TFTscreen.loadImage(imageName);, но я понятия не имею, как.

Я использую Arduino UNO R3 с экраном TFT LCD, версия IDE 1.5.5. .


person Majid Laissi    schedule 31.12.2013    source источник


Ответы (2)


void printDirectory(File dir) {
  //------------------------------------------------------------
  dir.rewindDirectory(); // you need to rewind the the Directory
  //------------------------------------------------------------
  while(true) { 
    File entry =  dir.openNextFile();
    if (! entry) {
      break;
    }          
    Serial.println(entry.name());

  ..etc

  }
}

// ошибка проблема №904

person XBasic3000    schedule 29.04.2014
comment
Я столкнулся с этой проблемой только сейчас, и это работает для меня. - person XBasic3000; 29.04.2014

Ну, в этой функции:

void printDirectory(File dir) {
    while(true) {

        File entry =  dir.openNextFile();
        if (! entry) {
            dir.rewindDirectory();
            break;
        }
        else 
            entry.close();  //<-- We need to close the file here

        Serial.println(entry.name());
   }
}

Файл должен быть закрыт, чтобы его можно было прочитать позже.

person Majid Laissi    schedule 31.12.2013