|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- /*
- * This example reads a simple CSV, comma-separated values, file.
- * Each line of the file has three values, a long and two floats.
- */
- #include <SPI.h>
- #include <SdFat.h>
-
- // SD chip select pin
- const uint8_t chipSelect = SS;
-
- // file system object
- SdFat sd;
-
- // create Serial stream
- ArduinoOutStream cout(Serial);
-
- char fileName[] = "TESTFILE.CSV";
- //------------------------------------------------------------------------------
- // store error strings in flash to save RAM
- #define error(s) sd.errorHalt(F(s))
- //------------------------------------------------------------------------------
- // read and print CSV test file
- void readFile() {
- long lg;
- float f1, f2;
- char text[10];
- char c1, c2, c3; // space for commas.
-
- // open input file
- ifstream sdin(fileName);
-
- // check for open error
- if (!sdin.is_open()) error("open");
-
- // read until input fails
- while (1) {
- // Get text field.
- sdin.get(text, sizeof(text), ',');
-
- // Assume EOF if fail.
- if (sdin.fail()) break;
-
- // Get commas and numbers.
- sdin >> c1 >> lg >> c2 >> f1 >> c3 >> f2;
-
- // Skip CR/LF.
- sdin.skipWhite();
-
- if (sdin.fail()) error("bad input");
-
- // error in line if not commas
- if (c1 != ',' || c2 != ',' || c3 != ',') error("comma");
-
- // print in six character wide columns
- cout << text << setw(6) << lg << setw(6) << f1 << setw(6) << f2 << endl;
- }
- // Error in an input line if file is not at EOF.
- if (!sdin.eof()) error("readFile");
- }
- //------------------------------------------------------------------------------
- // write test file
- void writeFile() {
-
- // create or open and truncate output file
- ofstream sdout(fileName);
-
- // write file from string stored in flash
- sdout << pstr(
- "Line 1,1,2.3,4.5\n"
- "Line 2,6,7.8,9.0\n"
- "Line 3,9,8.7,6.5\n"
- "Line 4,-4,-3.2,-1\n") << flush;
-
- // check for any errors
- if (!sdout) error("writeFile");
-
- sdout.close();
- }
- //------------------------------------------------------------------------------
- void setup() {
- Serial.begin(9600);
- while (!Serial) {} // wait for Leonardo
- cout << pstr("Type any character to start\n");
- while (Serial.read() <= 0) {}
- delay(400); // catch Due reset problem
-
- // initialize the SD card at SPI_HALF_SPEED to avoid bus errors with
- // breadboards. use SPI_FULL_SPEED for better performance
- if (!sd.begin(chipSelect, SPI_HALF_SPEED)) sd.initErrorHalt();
-
- // create test file
- writeFile();
-
- cout << endl;
-
- // read and print test
- readFile();
-
- cout << "\nDone!" << endl;
- }
- void loop() {}
|