Pages: [1]   Go Down
Author Topic: Problem with SD.h ... Serial.print... doesn't work  (Read 8993 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 7
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

I have been trying to use the examples that come with the SD.h library. the examples did not work but after some hours I found out that if I commented out all the "Serial.print("text") instructions then the program started to work and I could make a new file on the SD card and write some stuff to it (then I put the card in my  computer to see if there was anything on the card, so I have confirmed that it works)

but then I was going to add this function to an other project that I already had written. (add the function to be able to write to SD card) but as soon as I included SD.h (#include SD.h#) then the program went going "nuts" with all the Serial.print() instructions. (sorry for my lack of english).
So it looks like the instruction "Serial.print()"/Serial.println(), is also implemented in the SD.h class or something because if I include the SD.h then my program stops working normally (prints just some bullshit on the Serial Monitor or just keeps restarting on and on)

any solution folks? :smiley
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 7
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

these are the products that I am using
http://www.sparkfun.com/products/204
http://www.sparkfun.com/products/666
128MB SD card
Logged

Seattle, WA USA
Offline Offline
Brattain Member
*****
Karma: 631
Posts: 50039
Seattle, WA USA
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

The products that you are using are less important than the software you are using. Otherwise, you'd have posted in Hardware, no?
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 7
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

now here is my software (using Arduino 0022)

this program works (writes increment number up to 5000 to the SD card) but if I uncomment all the Serial.print() instructions the program just writes the fyrst Serial.print("Initializing SD card...") to the Serial monitor and freezes, or keeeps just writing "Initializing SD card" forever.

Quote
/*
  SD card read/write
 
 This example shows how to read and write data to and from an SD card file       
 The circuit:
 * SD card attached to SPI bus as follows:
 ** MOSI - pin 11
 ** MISO - pin 12
 ** CLK - pin 13
 ** CS - pin 4
 
 created   Nov 2010
 by David A. Mellis
 updated 2 Dec 2010
 by Tom Igoe
 
 This example code is in the public domain.
        
 */

#include <SD.h>

File file;

void setup()
{
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  Serial.begin(9600);

  // Serial.print("Initializing SD card...");
  // On the Ethernet Shield, CS is pin 4. It's set as an output by default.
  // Note that even if it's not used as the CS pin, the hardware SS pin
  // (10 on most Arduino boards, 53 on the Mega) must be left as an output
  // or the SD library functions will not work.
  pinMode(10, OUTPUT);

  if (!SD.begin(4)) {
    //   Serial.println("initialization failed!");
    //   return;
  }


  // Serial.println("initialization done.");

  // open the file. note that only one file can be open at a time,
  // so you have to close this one before opening another.
}

int j;
void loop()
{
  j++;
  file = SD.open("Test.txt", O_CREAT | O_WRITE | O_APPEND);

  while(millis() < 1000);  // delay so mills() is four digits

  for (int i = 0; i < 5000; i++) {
    file.println(i);
    //Serial.println(i);
  }
  // not needed in this example since close() will call flush.
  file.println(j);
  file.flush();  

  file.close();

}





Logged

0
Offline Offline
Edison Member
*
Karma: 67
Posts: 1652
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Your sketch seems to work on a 328 Arduino with the comments removed from the Serial.print/Serial.println statements.

Are you using a 168 Arduino?  On a 168 it is marginal.  There is too little RAM with the print/println statements because the literal strings are in RAM.  It crashes and restarts as you describe.

This sketch will probably create a corrupt file since it is unlikely the file will be properly closed.
« Last Edit: January 20, 2011, 11:50:27 am by fat16lib » Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 7
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Yes I am using arduino 168, I was just starting using arduino 2 weeks ago.. I thought the arduino software/compiler would give me some warning messages if I was out of ram, how can I see if I am out of ram/if the compiler generates a corrupt file? (just wondering so I can figure it out myself this problem will bug me later)

But thank you so much for finding my problem,  smiley-grin smiley-grin smiley-grin I have been 4 days or semething trying to figure it out  :o
Logged

Seattle, WA USA
Offline Offline
Brattain Member
*****
Karma: 631
Posts: 50039
Seattle, WA USA
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
I thought the arduino software/compiler would give me some warning messages if I was out of ram
Since SRAM usage is partly static (all your arrays and strings) and partly dynamic (run-time dependent) (heap, stack, etc.), the compiler can not detect when you will, at run-time, run out of SRAM.
Logged

Pages: [1]   Go Up
Jump to: