|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- // Example use of lfnOpenNext and open by index.
- // You can use test files located in
- // SdFat/examples/LongFileName/testFiles.
- #include<SPI.h>
- #include "SdFat.h"
- #include "FreeStack.h"
-
- // SD card chip select pin.
- const uint8_t SD_CS_PIN = SS;
-
- SdFat sd;
- SdFile file;
- SdFile dirFile;
-
- // Number of files found.
- uint16_t n = 0;
-
- // Max of ten files since files are selected with a single digit.
- const uint16_t nMax = 10;
-
- // Position of file's directory entry.
- uint16_t dirIndex[nMax];
- //------------------------------------------------------------------------------
- void setup() {
- Serial.begin(9600);
- while (!Serial) {}
- delay(1000);
-
- // Print the location of some test files.
- Serial.println(F("\r\n"
- "You can use test files located in\r\n"
- "SdFat/examples/LongFileName/testFiles"));
-
- // Initialize at the highest speed supported by the board that is
- // not over 50 MHz. Try a lower speed if SPI errors occur.
- if (!sd.begin(SD_CS_PIN, SD_SCK_MHZ(50))) {
- sd.initErrorHalt();
- }
- Serial.print(F("FreeStack: "));
- Serial.println(FreeStack());
- Serial.println();
-
- // List files in root directory.
- if (!dirFile.open("/", O_READ)) {
- sd.errorHalt("open root failed");
- }
- while (n < nMax && file.openNext(&dirFile, O_READ)) {
-
- // Skip directories and hidden files.
- if (!file.isSubDir() && !file.isHidden()) {
-
- // Save dirIndex of file in directory.
- dirIndex[n] = file.dirIndex();
-
- // Print the file number and name.
- Serial.print(n++);
- Serial.write(' ');
- file.printName(&Serial);
- Serial.println();
- }
- file.close();
- }
- }
- //------------------------------------------------------------------------------
- void loop() {
- int c;
-
- // Read any existing Serial data.
- do {
- delay(10);
- } while (Serial.available() && Serial.read() >= 0);
- Serial.print(F("\r\nEnter File Number: "));
-
- while (!Serial.available()) {
- SysCall::yield();
- }
- c = Serial.read();
- uint8_t i = c - '0';
- if (!isdigit(c) || i >= n) {
- Serial.println(F("Invald number"));
- return;
- }
- Serial.println(i);
- if (!file.open(&dirFile, dirIndex[i], O_READ)) {
- sd.errorHalt(F("open"));
- }
- Serial.println();
-
- char last = 0;
-
- // Copy up to 500 characters to Serial.
- for (int k = 0; k < 500 && (c = file.read()) > 0; k++) {
- Serial.write(last = (char)c);
- }
- // Add new line if missing from last line.
- if (last != '\n') {
- Serial.println();
- }
- file.close();
- Serial.flush();
- delay(100);
- }
|