Data logging sd write failure

Hello everybody.
I am new on arduino
i purchase lcd screen,sd card module and an dht 11 sensor
i have made this code from all projects :slight_smile:

// include the SD library:
#include <SPI.h>
#include <SD.h>
#include <LiquidCrystal.h>
#include <dht11.h>
#define DHT11PIN 2
// set up variables using the SD utility library functions:
Sd2Card card;
SdVolume volume;
SdFile root;

// change this to match your SD shield or module;
// Arduino Ethernet shield: pin 4
// Adafruit SD shields and modules: pin 10
// Sparkfun SD shield: pin 8
const int chipSelect = 4;
LiquidCrystal lcd(5,6,7,8,9,10);
dht11 DHT11;
File myFile;

void setup()
{
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  lcd.begin(16, 2);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }

  myFile = SD.open("test.txt", FILE_WRITE);
  Serial.print("\nInitializing 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);     // change this to 53 on a mega


  // we'll use the initialization code from the utility libraries
  // since we're just testing if the card is working!
  if (!card.init(SPI_HALF_SPEED, chipSelect)) {
    Serial.println("initialization failed. Things to check:");
    Serial.println("* is a card is inserted?");
    Serial.println("* Is your wiring correct?");
    Serial.println("* did you change the chipSelect pin to match your shield or module?");
    return;
  } else {
    Serial.println("Wiring is correct and a card is present.");
  }

  // print the type of card
  Serial.print("\nCard type: ");
  switch (card.type()) {
    case SD_CARD_TYPE_SD1:
      Serial.println("SD1");
      lcd.print("SD1 ");
      break;
    case SD_CARD_TYPE_SD2:
      Serial.println("SD2");
      lcd.print("SD2 ");
      break;
    case SD_CARD_TYPE_SDHC:
      Serial.println("SDHC");
      lcd.print("SDHC ");
      break;
    default:
      Serial.println("Unknown");
      lcd.print("NaN ");
  }

  // Now we will try to open the 'volume'/'partition' - it should be FAT16 or FAT32
  if (!volume.init(card)) {
    Serial.println("Could not find FAT16/FAT32 partition.\nMake sure you've formatted the card");
    return;
  }
  //Dht11 Data Logg
  myFile = SD.open("test.txt", FILE_WRITE);
  // print the type and size of the first FAT-type volume
  uint32_t volumesize;
  Serial.print("\nVolume type is FAT");
  Serial.println(volume.fatType(), DEC);
  lcd.print("FAT");
  lcd.print(volume.fatType(), DEC);
  Serial.println();

  volumesize = volume.blocksPerCluster();    // clusters are collections of blocks
  volumesize *= volume.clusterCount();       // we'll have a lot of clusters
  volumesize *= 512;                            // SD card blocks are always 512 bytes
  Serial.print("Volume size (bytes): ");
  Serial.println(volumesize);
  Serial.print("Volume size (Kbytes): ");
  volumesize /= 1024;
  Serial.println(volumesize);
  Serial.print("Volume size (Mbytes): ");
  volumesize /= 1024;
  Serial.println(volumesize);
  lcd.print(" ");
  lcd.print(volumesize);
  lcd.print("MB");
  

  Serial.println("\nFiles found on the card (name, date and size in bytes): ");
  root.openRoot(volume);
  root.ls(LS_R | LS_DATE | LS_SIZE);
  
  // Bir sat?r bo?luk b?rak?yoruz serial monitörde.
  Serial.println("\n");

  int chk = DHT11.read(DHT11PIN);
  
  
  // Sensörden gelen verileri serial monitörde yazd?r?yoruz.
  if (myFile) {
  Serial.print("Nem (%): ");
  myFile.println();
  lcd.setCursor(0, 1);
  lcd.print("H:");
  lcd.print((float)DHT11.humidity, 2);
  myFile.print((float)DHT11.humidity, 2); 
  Serial.println((float)DHT11.humidity, 2);

  Serial.print("Sicaklik (Celcius): ");
  lcd.print(" T:");
  lcd.print((float)DHT11.temperature, 2);
  myFile.print((float)DHT11.temperature, 2);
  lcd.print("C");
  Serial.println((float)DHT11.temperature, 2);

  Serial.print("Sicaklik (Fahrenheit): ");
  Serial.println(DHT11.fahrenheit(), 2);
  
  myFile.close(); 
   } else {
    // if the file didn't open, print an error:
    Serial.println("error opening test.txt");
  }

  delay(500);


}
 

void loop() {

}

but it cant write. i have tried 2 cards. lcd screen works but cant write to sd.
when i plug to computer,it seems to empty
formatted to : FAT

i tried read/write example and it is working. but my project isnt working ?
how i can fix it

You did not start the SD. Add SD.begin(4) to your setup.

void setup()
{
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  lcd.begin(16, 2);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }

  Serial.print(F("Starting SD..."));
  if(!SD.begin(4)) Serial.println(F("failed");
  else Serial.println(F("ok"));

  myFile = SD.open("test.txt", FILE_WRITE);
  // rest of your setup code

Thanks. It works
i have fix problem

ugur23:
Thanks. It works
i have fix problem

what was the problem?

Hi guys,

My SD card module doesnt want to write to the card. Can someone please have a look at my code and tell me if im doing something stupid.

RFID clocking system - UNO, RFID reader (SPI), SD card module (SPI), RTC (I2C), LCD (I2C) and a small 5v buzzer.

RFID CS = pin 10.
SD CS = pin 4.

Im using SD library, tried the SdFat too, same result. SD card initializes, creates file but doesnt write. All other components work fine. SD card also works fine if I run one of the examples, but as soon as I put the example code over to my project code, it doesnt want to write.

//include libraries
#include <SPI.h>
#include <SD.h>
#include <RFID.h>
#include <Time.h>
#include <DS3232RTC.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

//setup LCD
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

//define RFID pins
#define SS_PIN 10
#define RST_PIN 9
RFID rfid(SS_PIN, RST_PIN); 

//MEM card setup
const int chipSelect = 4;
File dataFile;

//define RFID card numbers
const String C1 = "1951152619185";
//const String C2 = "1910221322969";
//const String C1 = "388782199228";
const String C2 = "2141058519945";
const String C3 = "150648319966";
const String C4 = "214305619955";
const String C5 = "38178831990";
const String C6 = "68550199166";
const String C7 = "541535319993";
const String C8 = "166838019998";
const String C9 = "11894120201153";
const String C10 = "13423015620153";

//declare UID variables
int serNum0;
int serNum1;
int serNum2;
int serNum3;
int serNum4;
String UID;

//declare staTus variables
int staTus1 = 0;
int staTus2 = 0;
int staTus3 = 0;
int staTus4 = 0;
int staTus5 = 0;
int staTus6 = 0;
int staTus7 = 0;
int staTus8 = 0;
int staTus9 = 0;
int staTus10 = 0;
/************************************************************/

void setup()
{ 
  Serial.begin(9600);
  SPI.begin(); 
  
  //LCD loadscreen
  lcd.begin(16,2);   
  lcd.backlight(); 
  lcd.setCursor(4,0); 
  lcd.print("Welcome!");
  delay(1000);
  lcd.setCursor(8,1);
  lcd.print("Loading.");
  delay(1000);
  lcd.setCursor(6,1);
  lcd.print("Loading..");
  delay(1000);
  lcd.setCursor(4,1);
  lcd.print("Loading...");
  delay(1000);
  lcd.setCursor(1,1);
  lcd.print("Loading.....");
  delay(1000);
  lcd.clear();
  
  //init SD card reader  
  Serial.print("Initializing SD card...");
  pinMode(SS, OUTPUT);
  if (!SD.begin(chipSelect)) {
    Serial.println("Card failed, or not present");
    // don't do anything more:
    while (1) ;
  }
  Serial.println("card initialized.");
  
  dataFile = SD.open("datalog.txt", FILE_WRITE);
  if (! dataFile) {
    Serial.println("error opening datalog.txt");
    while (1) ;
  }
  
  
  //Sync with RTC
  setSyncProvider(RTC.get);   
    if(timeStatus() != timeSet) {
        Serial.println("Unable to sync with the RTC");
        lcd.clear();
        lcd.setCursor(0,0); 
        lcd.println("Unable to sync with the RTC");
    }
    else{
        Serial.println("RTC Module OK!");
        lcd.clear();
        lcd.setCursor(0,0); 
        lcd.println("RTC  Mod   [OK!]  ");
        delay(1500);
    }
  
  //define buzzerPin
  pinMode(3,OUTPUT);
  
  
  //RFID Ready screen
  digitalWrite(10,HIGH);
  rfid.init();
  Serial.println("Waiting for RFID Card...");
  lcd.setCursor(0,1); 
  lcd.println("RFID Mod   [OK!] ");
  delay(2000);
  lcd.clear();
  lcd.setCursor(4,0);
  lcd.print(" Ready:");
  lcd.setCursor(0,1);
  lcd.print("   Swipe Card");

}
/****************************************************************/

void loop()
{
  //Read UID
  if (rfid.isCard()) {
        if (rfid.readCardSerial()) {
                serNum0 = rfid.serNum[0];
                serNum1 = rfid.serNum[1];
                serNum2 = rfid.serNum[2];
                serNum3 = rfid.serNum[3];
                serNum4 = rfid.serNum[4];
                                          
                UID = String(rfid.serNum[0],DEC)+String(rfid.serNum[1],DEC)+String(rfid.serNum[2],DEC)+String(rfid.serNum[3],DEC)+String(rfid.serNum[4],DEC);
          
          //recocnise UID
          if (UID == C1 || C2 || C3 || C4 || C5 || C6 || C7 || C8 || C9 || C10){
                
                //Write CARD Number
                if (UID == C1){
                  lcd.clear();
                  Serial.print("CARD #1 ");
                  lcd.setCursor(0,0);
                  lcd.print("CARD#1 ");
                  
                  dataFile.println("TESTING 12");
                  dataFile.flush();
                  dataFile.close();


                  
                  //dataFile.print("CARD #1,");
                }
                      
                //CARD # 1 status
                if (UID == C1){
                  if (staTus1 == 0){
                    Serial.print("[IN] ");
                    lcd.setCursor(0,1);   
                    lcd.print("[IN]");
                    //dataFile.print("IN,");
                    staTus1 = 1;
                }
                  else if (staTus1 == 1){
                    Serial.print("[OUT] ");
                    lcd.setCursor(0,1);   
                    lcd.print("[OUT]");
                    //dataFile.print("IN,");
                    staTus1 = 0;
                  }
                }
                
                // RTC display time Serial
                Serial.print(hour());
                printDigits(minute());
                printDigits(second());
                Serial.print(' ');
                Serial.print(day());
                Serial.print('/');
                Serial.print(month());
                Serial.print('/');
                Serial.print(year()); 
                Serial.println();              
                // RTC display time LCD
                lcd.setCursor(8,0);
                lcd.print(hour());
                lcd.print(":");
                lcd.print(minute());
                lcd.print(":");
                lcd.print(second());
                lcd.setCursor(7,1);
                lcd.print(day());
                lcd.print('/');
                lcd.print(month());
                lcd.print('/');
                lcd.print(year()); 
                lcd.print("    ");
               
               //buzzer beep
               analogWrite(3,20);
               delay(700);
               analogWrite(3,0);
               
               //write to SD card                             
                //dataFile.print(hour());
                //dataFile.print(minute());
                //dataFile.print(second());
                //dataFile.print(',');
                //dataFile.print(day());
                //dataFile.print('/');
                //dataFile.print(month());
                //dataFile.print('/');
                //dataFile.print(year()); 
                //dataFile.print(',');
                //dataFile.println();
               
               //Next card screen
               delay(2500);
               lcd.clear();
               lcd.setCursor(4,0);
               lcd.print(" Ready:");
               lcd.setCursor(0,1);
               lcd.print("   Swipe Card");
               
               }   
             
             }   
        
    
  }
    rfid.halt();
    
      
}

void printDigits(int digits)
{
    // utility function for digital clock display: prints preceding colon and leading 0
    Serial.print(':');
    if(digits < 10)
        Serial.print('0');
    Serial.print(digits);
    
}

SPI issue?
current/voltage issue?

please help, ive been on this thing now for almost a week :frowning: