Venugopal Pudur
Published © CC0

Simulation of SD Card Module in Proteus

I will be explaining how to read information using an SD card in proteus simulation software.

IntermediateProtip1 hour2,861

Things used in this project

Story

Read more

Schematics

Circuit Diagram

Code

Final Code for Simulation

C/C++
#include <SPI.h>
#include <SD.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <TimeLib.h>

#define TIME_HEADER  "T"   // Header tag for serial time sync message
#define TIME_REQUEST  7    // ASCII bell character requests a time sync message 

File myFile;
// initialize the library by associating any needed LCD interface pin
// with the arduino pin number it is connected to
//const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
//LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
LiquidCrystal_I2C lcd(0x20,16,2);



void digitalClockDisplay(){
  // digital clock display of the time
  lcd.print("Time ");
  lcd.print(hour());
  Serial.print(hour());
  printDigits(minute());
  printDigits(second());
  lcd.setCursor(0, 1);
  lcd.print("Date ");
  lcd.print(day());
  lcd.print("/");
  lcd.print(month());
  lcd.print("/");
  lcd.print(year()); 
   
  Serial.print(" ");
  Serial.print(day());
  Serial.print(" ");
  Serial.print(month());
  Serial.print(" ");
  Serial.print(year()); 
  Serial.println(); 
}

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


void processSyncMessage() {
  unsigned long pctime;
  const unsigned long DEFAULT_TIME = 1357041600; // Jan 1 2013

  if(Serial.find(TIME_HEADER)) {
     pctime = Serial.parseInt();
     if( pctime >= DEFAULT_TIME) { // check the integer is a valid time (greater than Jan 1 2013)
       setTime(pctime); // Sync Arduino clock to the time received on the serial port
     }
  }
}

time_t requestSync()
{
  Serial.write(TIME_REQUEST);  
  return 0; // the time will be sent later in response to serial mesg
}




void setup() {
  lcd.init();
    lcd.init();
    lcd.backlight();
    Serial.begin(9600);
  // set up the LCD's number of columns and rows:
  if (!SD.begin(10)) {
    Serial.println("initialization failed!");
    return;
 }
 else{
  Serial.println("initialization Success!");
  }
         
  myFile = SD.open("group.txt", FILE_WRITE);

  // if the file opened okay, write to it:
  if (myFile) {
    myFile.print("Time");
    myFile.print(",");
    myFile.println("Temperature");
 
    // close the file:
    myFile.close();
   
     
}
    else {
        
        Serial.print("error");
    }
    
  
  while (!Serial) ; // Needed for Leonardo only
  pinMode(13, OUTPUT);
  setSyncProvider( requestSync);  //set function to call when sync required
  Serial.println("Waiting for sync message");
  lcd.print("Loading.....");
  
}

void loop() {
  if (Serial.available()) {
    processSyncMessage();
  }
  if (timeStatus()!= timeNotSet) {
    digitalClockDisplay();  
  }
 
  int  lm35_pin = A0;
float temperature = analogRead(lm35_pin);
temperature = (temperature*500)/1023;

 File data_file = SD.open("group.txt", FILE_WRITE);

  if (data_file) {   
  data_file.print(day());
  data_file.print("/");
  data_file.print(month());
  data_file.print("/");
  data_file.print(year()); 
  data_file.print(","); 
  data_file.print(hour()); 
   data_file.print(":");       
 // Serial.print(hour());
   int p= printDigits(minute());
   data_file.print(p);
   data_file.print(":");
   int m= printDigits(second());
   data_file.print(m);                     
   data_file.print(",");  
data_file.println(temperature);

    data_file.close();

  }
    else {
        Serial.print("error");
    }
    
  lcd.setCursor(0, 0);
}

Credits

Venugopal Pudur

Venugopal Pudur

1 project • 0 followers

Comments