У меня возникла проблема при попытке перечислить файлы на 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. .