// This example is really out of date so best to ignore it // It is still here to create files for other tests. /* * Write Example * * This sketch creates a new file and writes 100 lines to the file. * No error checks on write in this example. */ #include #include // use functions to print strings from flash memory const uint8_t SD_CHIP_SELECT = SS; SdFat sd; SdFile file; // store error strings in flash to save RAM #define error(s) sd.errorHalt_P(PSTR(s)) /* * Write CR LF to a file */ void writeCRLF(SdFile& f) { f.write((uint8_t*)"\r\n", 2); } /* * Write an unsigned number to a file */ void writeNumber(SdFile& f, uint32_t n) { uint8_t buf[10]; uint8_t i = 0; do { i++; buf[sizeof(buf) - i] = n % 10 + '0'; n /= 10; } while (n); f.write(&buf[sizeof(buf) - i], i); } /* * Write a string to a file */ void writeString(SdFile& f, char *str) { uint8_t n; for (n = 0; str[n]; n++); f.write((uint8_t *)str, n); } void setup(void) { Serial.begin(9600); while (!Serial) {} // wait for Leonardo PgmPrintln("Type any character to start"); while (Serial.read() <= 0) {} delay(200); // 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(SD_CHIP_SELECT, SPI_HALF_SPEED)) sd.initErrorHalt(); // create a new file char name[] = "WRITE00.TXT"; for (uint8_t i = 0; i < 100; i++) { name[5] = i/10 + '0'; name[6] = i%10 + '0'; if (file.open(name, O_CREAT | O_EXCL | O_WRITE)) break; } if (!file.isOpen()) error ("file.create"); Serial.print("Writing to: "); Serial.println(name); // write 100 line to file for (uint8_t i = 0; i < 100; i++) { writeString(file, "line "); writeNumber(file, i); writeString(file, " millis = "); writeNumber(file, millis()); writeCRLF(file); } // close file and force write of all data to the SD card file.close(); Serial.println("Done"); } void loop(void) {}