-
-
Save ladyada/13efab4022b7358033c7 to your computer and use it in GitHub Desktop.
| #include <SPI.h> | |
| #include <SD.h> | |
| // Set the pins used | |
| #define cardSelect 4 | |
| File logfile; | |
| // blink out an error code | |
| void error(uint8_t errno) { | |
| while(1) { | |
| uint8_t i; | |
| for (i=0; i<errno; i++) { | |
| digitalWrite(13, HIGH); | |
| delay(100); | |
| digitalWrite(13, LOW); | |
| delay(100); | |
| } | |
| for (i=errno; i<10; i++) { | |
| delay(200); | |
| } | |
| } | |
| } | |
| // This line is not needed if you have Adafruit SAMD board package 1.6.2+ | |
| // #define Serial SerialUSB | |
| void setup() { | |
| // connect at 115200 so we can read the GPS fast enough and echo without dropping chars | |
| // also spit it out | |
| Serial.begin(115200); | |
| Serial.println("\r\nAnalog logger test"); | |
| pinMode(13, OUTPUT); | |
| // see if the card is present and can be initialized: | |
| if (!SD.begin(cardSelect)) { | |
| Serial.println("Card init. failed!"); | |
| error(2); | |
| } | |
| char filename[15]; | |
| strcpy(filename, "/ANALOG00.TXT"); | |
| for (uint8_t i = 0; i < 100; i++) { | |
| filename[7] = '0' + i/10; | |
| filename[8] = '0' + i%10; | |
| // create if does not exist, do not open existing, write, sync after write | |
| if (! SD.exists(filename)) { | |
| break; | |
| } | |
| } | |
| logfile = SD.open(filename, FILE_WRITE); | |
| if( ! logfile ) { | |
| Serial.print("Couldnt create "); | |
| Serial.println(filename); | |
| error(3); | |
| } | |
| Serial.print("Writing to "); | |
| Serial.println(filename); | |
| pinMode(13, OUTPUT); | |
| pinMode(8, OUTPUT); | |
| Serial.println("Ready!"); | |
| } | |
| uint8_t i=0; | |
| void loop() { | |
| digitalWrite(8, HIGH); | |
| logfile.print("A0 = "); logfile.println(analogRead(0)); | |
| Serial.print("A0 = "); Serial.println(analogRead(0)); | |
| digitalWrite(8, LOW); | |
| delay(100); | |
| } |
The sketch still writes incremental filenames, but doesn't write any data to the files.
(I'm using an RTC, would love to be able to write a valid timestamp as well...)
When I add logfile.flush() at the end of my loop, all is well.
I suppose this is the same as putting the Open and Close into the loop, yes?
As per documentation of SD (https://www.arduino.cc/en/Reference/SDCardNotes):
Opening/Closing files
When you use file.write(), it doesn't write to the card until you flush() or close(). Whenever you open a file, be sure to close it to save your data.
The documentation of the "Adafruit Feather M0 Adalogger" needs to be updated, as "https://learn.adafruit.com/adafruit-feather-m0-adalogger/using-the-sd-card" is saying that it writes on the SD-Card once the buffer is full and with this code it will not.
Yeah, had to add logfile.flush()