Alright still struggling with some additional code. I've been all over the googles. I found you need to install a resistor on the MSIO (which I did). This has allowed me to leave the cards connected and run the code for each separate from one another and they work just fine. However when I combine the codes the SD card faults when reading a RFID tag.
I eventually would like to add the uid to a string that I save to the SD card every second.
I am open to try anything.
#include <SD.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "RTClib.h"
#include <SPI.h>
#include <MFRC522.h>
RTC_DS3231 rtc;
const int chipSelect = 10;
LiquidCrystal_I2C lcd(0x27,4,20);
unsigned long previousMillis = 0;
const long interval = 1000;
#define SS_PIN 49
#define RST_PIN 6
MFRC522 rfid(SS_PIN, RST_PIN);
MFRC522::MIFARE_Key key;
byte nuidPICC[4];
void setup()
{
pinMode(4, OUTPUT);
pinMode(10, OUTPUT);
pinMode(53, OUTPUT);
pinMode(49, OUTPUT);
digitalWrite(10, HIGH);
digitalWrite(49, HIGH);
lcd.init();
lcd.backlight();
Serial.begin(9600);
Serial.println("Prepare SD card");
lcd.setCursor(0, 0);
lcd.print("Prepare SD card");
delay(500);
if (!SD.begin(chipSelect)) {
Serial.println("Card Failed");
lcd.setCursor(0,1);
lcd.print("Card Failed");
while (1);
}
Serial.println("Card Ready");
lcd.setCursor(0,1);
lcd.print("Card Ready");
delay(500);
lcd.clear();
delay(500);
SPI.begin(); // Init SPI bus
rfid.PCD_Init(); // Init MFRC522
for (byte i = 0; i < 6; i++) {
key.keyByte[i] = 0xFF;
}
}
void loop()
{
if ( ! rfid.PICC_IsNewCardPresent())
return;
if ( ! rfid.PICC_ReadCardSerial())
return;
for (byte i = 0; i < 4; i++) {
nuidPICC[i] = rfid.uid.uidByte[i];
}
printHex(rfid.uid.uidByte, rfid.uid.size);
Serial.println();
rfid.PICC_HaltA();
rfid.PCD_StopCrypto1();
DateTime now = rtc.now();
unsigned long currentMillis = millis();
String path = "";
String sensors = "";
String dataString = "";
String filename = "";
String foldername = "";
String date = "";
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
lcd.clear();
for (int analogPin = 0; analogPin < 8; analogPin++) {
int sensor = analogRead(analogPin);
dataString += String(sensor);
sensors += String(sensor);
if (analogPin < 7) {
dataString += ",";
sensors += ",";
}
}
dataString += ",";
dataString += String(now.month(), DEC);
dataString += "/";
dataString += String(now.day(), DEC);
dataString += "/";
dataString += String(now.year(), DEC);
dataString += ",";
dataString += String(now.hour(), DEC);
dataString += ":";
dataString += String(now.minute(), DEC);
dataString += ":";
dataString += String(now.second(), DEC);
filename += String(now.hour(), DEC);
filename += ".csv";
foldername += String(now.year(), DEC);
foldername += String(now.month(), DEC);
foldername += String(now.day(), DEC);
path += String(foldername);
path += "/";
path += String(filename);
date += String(now.month(), DEC);
date += "/";
date += String(now.day(), DEC);
date += "/";
date += String(now.year(), DEC);
date += " ";
date += String(now.hour(), DEC);
date += ":";
date += String(now.minute(), DEC);
date += ":";
date += String(now.second(), DEC);
SD.mkdir(foldername);
File dataFile = SD.open(path, FILE_WRITE);
if (dataFile) {
dataFile.println(dataString);
dataFile.close();
Serial.println(sensors);
Serial.println(foldername);
Serial.println(filename);
Serial.println(path);
lcd.home();
lcd.print(date);
lcd.setCursor(0,2);
lcd.print("Folder:");
lcd.setCursor(14,2);
lcd.print("File:");
lcd.setCursor(0,3);
lcd.print(foldername);
lcd.setCursor(14,3);
lcd.print(filename);
}
else {
Serial.println("Error Opening File");
lcd.setCursor(0,0);
lcd.print("Error Opening File");
}
}
}
void printHex(byte *buffer, byte bufferSize) {
for (byte i = 0; i < bufferSize; i++) {
Serial.print(buffer[i] < 0x10 ? " 0" : " ");
Serial.print(buffer[i], HEX);
}
}