Rest Of Code:
void read_and_log (){
//read the rfid tag if present
if (mySerial.available() > 0) {
data[counter] = mySerial.read();
counter++;
if(counter > 13) {
//we read the whole message, so reset counter
counter = 0;
//check if start of text and end of text is correct
if(data[0] == stx && data[13] == etx) {
//Turn LED on pin 8 ON
digitalWrite(8,HIGH);
Serial.println("RFID Tag correctly received.");
//Hex ID blocks. Two transmitted Bytes form one Hex ID block.
//Hex ID blocks: 6 2 | E 3 | 0 8 | 6 C | E D
//Transmitted Bytes: 36H 32H | 45H 33H | 30H 38H | 36H 43H | 45H 44H
hexBlock1 = AsciiCharToNum(data[1])*16 + AsciiCharToNum(data[2]);
hexBlock2 = AsciiCharToNum(data[3])*16 + AsciiCharToNum(data[4]);
hexBlock3 = AsciiCharToNum(data[5])*16 + AsciiCharToNum(data[6]);
hexBlock4 = AsciiCharToNum(data[7])*16 + AsciiCharToNum(data[8]);
hexBlock5 = AsciiCharToNum(data[9])*16 + AsciiCharToNum(data[10]);
//Transmitted checksum.
hexChecksum = AsciiCharToNum(data[11])*16 + AsciiCharToNum(data[12]);
//XOR algorithm to calculate checksum of ID blocks.
hexCalculatedChecksum = hexBlock1 ^ hexBlock2 ^ hexBlock3 ^ hexBlock4 ^ hexBlock5;
if ( hexCalculatedChecksum == hexChecksum )
{
Serial.println("Checksum OK!");
// gets the date and time
RX8025.getRtcTime(&rtc_sec, &rtc_min, &rtc_hou, &rtc_wee, &rtc_dat, &rtc_mon, &rtc_yea);
//going to write it all to sd now
Serial.println("Will try to write data to RFIDlog.csv on SD now.");
// open RFIDlog.csv. note that only one file can be open at a time,
// so you have to close this one before opening another.
File dataFile = SD.open("RFIDlog.csv", FILE_WRITE);
// if the file is available, write to it:
if (dataFile) {
//Write the RFID Card ID
dataFile.print("RFID Tag ID:,");
dataFile.print(data[3], BYTE);
dataFile.print(data[4], BYTE);
dataFile.print(data[5], BYTE);
dataFile.print(data[6], BYTE);
dataFile.print(data[7], BYTE);
dataFile.print(data[8], BYTE);
dataFile.print(data[9], BYTE);
dataFile.print(data[10], BYTE);
dataFile.print(",");
//Log day
dataFile.print("Day:,");
switch(rtc_wee)
{
case 0x00:
{
dataFile.print("Sunday,");
break;
}
case 0x01:
{
dataFile.print("Monday,");
break;
}
case 0x02:
{
dataFile.print("Tuesday,");
break;
}
case 0x03:
{
dataFile.print("Wednesday,");
break;
}
case 0x04:
{
dataFile.print("Thursday,");
break;
}
case 0x05:
{
dataFile.print("Friday,");
break;
}
case 0x06:
{
dataFile.print("Saturday,");
break;
}
}
//Log Date
dataFile.print("Date:,");
dataFile.print(rtc_dat,DEC);
dataFile.print("/");
dataFile.print(rtc_mon,DEC);
dataFile.print("/");
dataFile.print(rtc_yea,DEC);
dataFile.print(",");
//Log time
dataFile.print("Time:,");
dataFile.print(rtc_hou,DEC);
dataFile.print(":");
dataFile.print(rtc_min,DEC);
dataFile.print(":");
dataFile.print(rtc_sec,DEC);
dataFile.print(",");
//get and log temp
Logtemp();
dataFile.print("Temp,");
dataFile.print(val*0.0625);
dataFile.println(",");
//close the RFIDlog.csv file
dataFile.close();
// print to the serial port for monitoring this line can be removed along with
// 'void monitorout()' at the end of the script to reduce sketch size, but
// only do this if you are sure every thing works and you DO NOT need a diag output
// when writing the data to the SD card
monitorout();
// flush newsoftserial and delay to prevent mutiple readings of same RFID tag
delay(2500);
mySerial.flush();
//turn led off
digitalWrite(8,LOW);
}
// if the file RFIDlog.csv isn't open, pop up an error:
else {
Serial.println("Error opening file - RFIDlog.csv");
return;
}
}
else {
Serial.println("Checksum didn't match transmitted checksum. Corrupt data!");
// don't do anything more:
return;
}
}
}
}
}
uint8_t AsciiCharToNum(byte data) {
//First substract 48 to convert the char representation
//of a number to an actual number.
data -= '0';
//If it is greater than 9, we have a Hex character A-F.
//Substract 7 to get the numeral representation.
if (data > 9)
data -= 7;
return data;
}
void data_file_dump () {
File dataFile = SD.open("RFIDlog.csv");
// if the file is available, write to it:
if (dataFile) {
while (dataFile.available()) {
Serial.write(dataFile.read());
}
dataFile.close();
Serial.print("Finished dumping, waiting for 2 min");
delay(120000); //delay for 2 minutes after dumping RFIDlog.csv
}
// if the file isn't open, pop up an error:
else {
Serial.println("Error opening RFIDlog.csv to dump data");
delay(2000);
}
}
void monitorout(){
//Print Tags ID
Serial.print("RFID Tag ID:");
Serial.print(",");
Serial.print(data[3], BYTE);
Serial.print(data[4], BYTE);
Serial.print(data[5], BYTE);
Serial.print(data[6], BYTE);
Serial.print(data[7], BYTE);
Serial.print(data[8], BYTE);
Serial.print(data[9], BYTE);
Serial.print(data[10], BYTE);
Serial.print(",");
//print tags checksum
Serial.print("Checksum:");
Serial.print(data[11], BYTE);
Serial.print(data[12], BYTE);
Serial.print(",");
//print date
Serial.print("Date:");
Serial.print(",");
Serial.print(rtc_dat,DEC);
Serial.print("/");
Serial.print(rtc_mon,DEC);
Serial.print("/");
Serial.print(rtc_yea,DEC);
Serial.print(",");
//print day
Serial.print("Day:,");
switch(rtc_wee)
{
case 0x00:
{
Serial.print("Sunday,");
break;
}
case 0x01:
{
Serial.print("Monday,");
break;
}
case 0x02:
{
Serial.print("Tuesday");
break;
}
case 0x03:
{
Serial.print("Wednesday");
break;
}
case 0x04:
{
Serial.print("Thursday");
break;
}
case 0x05:
{
Serial.print("Friday");
break;
}
case 0x06:
{
Serial.print("Saturday,");
break;
}
}
//print time
Serial.print("Time:");
Serial.print(",");
Serial.print(rtc_hou,DEC);
Serial.print(":");
Serial.print(rtc_min,DEC);
Serial.print(":");
Serial.print(rtc_sec,DEC);
Serial.print(",");
//print temp.
Serial.print("Temp Deg. C");
Serial.print(",");
Serial.print(val*0.0625);
Serial.println(",");
//Done now
Serial.println("Done!");
Serial.println(" ");
}
void InitiSD(){
//initializ sd card
Serial.println("Initializing SD Card...");
// make sure that the default chip select pin is set to
// output, even if you don't use it:
pinMode(10, OUTPUT);
// see if the card is present and can be initialized:
if (!SD.begin(chipSelect)) {
Serial.println("SD Card failed, or not present.");
// don't do anything more:
return;
}
Serial.println("SD Card Ready.");
Serial.println(" ");
}
void erase_dataFile(){
Serial.println("Removing RFIDlog.csv...");
SD.remove("RFIDlog.csv");
Serial.println("RFIDlog.csv Removed");
delay(20000);
if (SD.exists("RFIDlog.csv")){
Serial.println("RFIDlog.csv exists.");
delay(5000);
}
else {
Serial.println("RFIDlog.csv doesn't exist.");
delay(5000);
}
}
void Logtemp(){
res = Wire.requestFrom(72,2);
if (res == 2) {
msb = Wire.receive(); /* Whole degrees */
lsb = Wire.receive(); /* Fractional degrees */
val = ((msb) << 4); /* MSB */
val |= (lsb >> 4); /* LSB */
//dataFile.print("Temp,");
//dataFile.print(val*0.0625);
}
}