Go Down

Topic: Sd card data loging for rfid (Read 862 times) previous topic - next topic

catchra

Hi im new to using arduino and im have a problem with adding sd card logging to my app.

So far everything will compile but i get an empty file on the sd card.
i am useing an Arduino MEGA 2560 a wiznet 5100 for the sd card and for the rfid im useing a parallax rfid reader Serial.
i'm completely stuck any help will be greatly appreciated.

hear is the code im useing

Code: [Select]

 #include <SD.h>
const int chipSelect = 4;
int  val = 0;
char code[10];
int bytesread = 0;

void setup() {

Serial.begin(2400); // RFID reader SOUT pin connected to Serial RX pin at 2400bps

Serial.print("Initializing SD card...");
   // make sure that the default chip select pin is set to
   // output, even if you don't use it:
   pinMode(53, OUTPUT);
   
  // see if the card is present and can be initialized:
   if (!SD.begin(chipSelect)) {
     Serial.println("Card failed, or not present");
     // don't do anything more:
     return;
   }
   Serial.println("card initialized.");

pinMode(2,OUTPUT);   // Set digital pin 2 as OUTPUT to connect it to the RFID /ENABLE pin
digitalWrite(2, LOW);                  // Activate the RFID reader



void loop() {
File dataFile = SD.open("datalog.txt", FILE_WRITE);
  if(Serial.available() > 0) {          // if data available from reader
    if((val = Serial.read()) == 10) {   // check for header
      bytesread = 0;
      while(bytesread<10) {              // read 10 digit code
        if( Serial.available() > 0) {
          val = Serial.read();
          if((val == 10)||(val == 13)) { // if header or stop bytes before the 10 digit reading
            break;                       // stop reading
          }
          code[bytesread] = val;         // add the digit           
          bytesread++;                   // ready to read next digit 
        }
      }
      if(bytesread == 10) {              // if 10 digit read is complete
        Serial.print("TAG code is: ");   // possibly a good TAG
        Serial.println(code);         // print the TAG code
        while (dataFile) {
     dataFile.println(code);
     dataFile.close();}
      }
      bytesread = 0;
           delay(500);                       // wait for a second
    }
  }
}

countrypaul

Not sure if this will solve your problem, but you don't appear to be NULL terminating your code string anywhere. Depending on what is in the string the println may work or may run off through memory and hang. Try adding a
code[bytesread] = 0;
after your while loop (and check that bytesread is still <10 to avoid overflow).

Go Up