Advertisement
safwan092

RFID+Data-Logger+RTC+Arduino(Atendance)-final

Feb 19th, 2021
947
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 12.29 KB | None | 0 0
  1. #include <SPI.h> //
  2. #include <SD.h> //
  3. #include <Wire.h> //
  4. #include "RTClib.h" //
  5. #include <MFRC522.h> //
  6. #include <LiquidCrystal_I2C.h>
  7.  
  8. LiquidCrystal_I2C lcd(0x27,16,2);
  9. #define SS_PIN 8 // 10 for shield // 8 for normal small module
  10. #define RST_PIN 9 // FOR RFID READER
  11. MFRC522 mfrc522(SS_PIN, RST_PIN);   // Create MFRC522 instance.
  12.  
  13.  
  14. //-------------------------------------------------------------------------USER # 1
  15. String user001ID = "09 2A 13 A3";
  16. boolean user001Status = true;
  17. //-------------------------------------------------------------------------
  18.  
  19. //-------------------------------------------------------------------------USER # 2
  20. String user002ID = "D4 A0 30 2A";
  21. boolean user002Status = true;
  22. //-------------------------------------------------------------------------
  23.  
  24.  
  25. // A simple data logger for the Arduino analog pins
  26.  
  27. // how many milliseconds between grabbing data and logging it. 1000 ms is once a second
  28. #define LOG_INTERVAL  1000 // mills between entries (reduce to take more/faster data)
  29.  
  30. // how many milliseconds before writing the logged data permanently to disk
  31. // set it to the LOG_INTERVAL to write each time (safest)
  32. // set it to 10*LOG_INTERVAL to write all data every 10 datareads, you could lose up to
  33. // the last 10 reads if power is lost but it uses less power and is much faster!
  34. #define SYNC_INTERVAL 1000 // mills between calls to flush() - to write data to the card
  35. uint32_t syncTime = 0; // time of last sync()
  36. int buttonReading = 1;
  37. #define ECHO_TO_SERIAL   1 // echo data to serial port
  38. #define WAIT_TO_START    0 // Wait for serial input in setup()
  39.  
  40.  
  41. RTC_DS1307 RTC; // define the Real Time Clock object
  42.  
  43. // for the data logging shield, we use digital pin 10 for the SD cs line
  44. const int chipSelect = 10;
  45.  
  46. // the logging file
  47. File logfile;
  48.  
  49. void error(char *str)
  50. {
  51.   Serial.print("error: ");
  52.   Serial.println(str);
  53.  
  54.   while (1);
  55. }
  56.  
  57. void setup(void)
  58. {
  59.   lcd.init();
  60.   lcd.init();
  61.   lcd.backlight();
  62.   lcd.print("Connecting...");
  63.   Serial.begin(9600);
  64.   Serial.println();
  65.   SPI.begin();      // Initiate  SPI bus
  66.   mfrc522.PCD_Init();   // Initiate MFRC522
  67.   pinMode(7, OUTPUT);
  68. #if WAIT_TO_START
  69.   Serial.println("Type any character to start");
  70.   while (!Serial.available());
  71. #endif //WAIT_TO_START
  72.  
  73.   // initialize the SD card
  74.   Serial.print("Initializing SD card...");
  75.   // make sure that the default chip select pin is set to
  76.   // output, even if you don't use it:
  77.   pinMode(10, OUTPUT);
  78.   //  pinMode(buttonPin, INPUT);
  79.   // see if the card is present and can be initialized:
  80.   if (!SD.begin(chipSelect)) {
  81.     error("Card failed, or not present");
  82.   }
  83.   Serial.println("card initialized.");
  84.  
  85.   // create a new file
  86.   char filename[] = "LOGGER00.CSV";
  87.   for (uint8_t i = 0; i < 100; i++) {
  88.     filename[6] = i / 10 + '0';
  89.     filename[7] = i % 10 + '0';
  90.     if (! SD.exists(filename)) {
  91.       // only open a new file if it doesn't exist
  92.       logfile = SD.open(filename, FILE_WRITE);
  93.       break;  // leave the loop!
  94.     }
  95.   }
  96.  
  97.   if (! logfile) {
  98.     error("couldnt create file");
  99.   }
  100.  
  101.   Serial.print("Logging to: ");
  102.   Serial.println(filename);
  103.  
  104.   // connect to RTC
  105.   Wire.begin();
  106.   if (!RTC.begin()) {
  107.     logfile.println("RTC failed");
  108. #if ECHO_TO_SERIAL
  109.     Serial.println("RTC failed");
  110. #endif  //ECHO_TO_SERIAL
  111.   }
  112.  
  113.  
  114.   logfile.println("Date,Time,Log");
  115. #if ECHO_TO_SERIAL
  116.   Serial.println("Date-Time,Status");
  117. #endif //ECHO_TO_SERIAL
  118.  
  119.   delay(2000);
  120.   lcd.clear();
  121.   lcd.print("System Ready");
  122.   delay(2500);
  123.   lcd.clear();
  124.   lcd.setCursor(0, 0);
  125.   lcd.print("Log:");
  126. }
  127.  
  128. void loop()
  129. {
  130.   // Look for new cards
  131.   if ( ! mfrc522.PICC_IsNewCardPresent())
  132.   {
  133.     return;
  134.   }
  135.   // Select one of the cards
  136.   if ( ! mfrc522.PICC_ReadCardSerial())
  137.   {
  138.     return;
  139.   }
  140.   //Show UID on serial monitor
  141.   String content = "";
  142.   byte letter;
  143.   buzz();
  144.   for (byte i = 0; i < mfrc522.uid.size; i++)
  145.   {
  146.     Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
  147.     Serial.print(mfrc522.uid.uidByte[i], HEX);
  148.     content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
  149.     content.concat(String(mfrc522.uid.uidByte[i], HEX));
  150.   }
  151.   Serial.println();
  152.   content.toUpperCase();
  153.  
  154.   ///////////////////////////////////////////////////////////////////////// User #001 /start
  155.   if (content.substring(1) == user001ID)
  156.   {
  157.     if (user001Status == true) {
  158.       user001Status = false;
  159.       //Serial.println("Shahad Just Signed IN");
  160.       DateTime now;
  161.       // fetch the time
  162.       now = RTC.now();
  163.       // log time
  164.       logfile.print('"');
  165.       logfile.print(now.year(), DEC);
  166.       logfile.print("/");
  167.       logfile.print(now.month(), DEC);
  168.       logfile.print("/");
  169.       logfile.print(now.day(), DEC);
  170.       logfile.print('"');
  171.       logfile.print(",");
  172.       logfile.print(now.hour(), DEC);
  173.       logfile.print(":");
  174.       logfile.print(now.minute(), DEC);
  175.       logfile.print(":");
  176.       logfile.print(now.second(), DEC);
  177. #if ECHO_TO_SERIAL
  178.       Serial.print('"');
  179.       Serial.print(now.year(), DEC);
  180.       Serial.print("/");
  181.       Serial.print(now.month(), DEC);
  182.       Serial.print("/");
  183.       Serial.print(now.day(), DEC);
  184.       Serial.print(" ");
  185.       Serial.print(now.hour(), DEC);
  186.       Serial.print(":");
  187.       Serial.print(now.minute(), DEC);
  188.       Serial.print(":");
  189.       Serial.print(now.second(), DEC);
  190.       Serial.print('"');
  191. #endif //ECHO_TO_SERIAL
  192.  
  193.       delay(10);
  194.  
  195.       logfile.print(", ");
  196.       logfile.print("Shahad Just Signed IN");
  197. #if ECHO_TO_SERIAL
  198.       Serial.print(", ");
  199.       Serial.print("Shahad Just Signed IN");
  200.       lcd.setCursor(0, 1);
  201.       lcd.print("Shahad-Sign IN");
  202.       delay(3000);
  203.       lcd.setCursor(0, 1);
  204.       lcd.print("                ");
  205. #endif //ECHO_TO_SERIAL
  206.       logfile.println();
  207. #if ECHO_TO_SERIAL
  208.       Serial.println();
  209. #endif // ECHO_TO_SERIAL
  210.       // Now we write data to disk! Don't sync too often - requires 2048 bytes of I/O to SD card
  211.       // which uses a bunch of power and takes time
  212.       if ((millis() - syncTime) < SYNC_INTERVAL) return;
  213.       syncTime = millis();
  214.       // blink LED to show we are syncing data to the card & updating FAT!
  215.       logfile.flush();
  216.       delay(1000);
  217.     }
  218.     else if (user001Status == false) {
  219.       user001Status = true;
  220.       //Serial.println("User 001 Just Signed OUT");
  221.       DateTime now;
  222.       // fetch the time
  223.       now = RTC.now();
  224.       // log time
  225.       logfile.print('"');
  226.       logfile.print(now.year(), DEC);
  227.       logfile.print("/");
  228.       logfile.print(now.month(), DEC);
  229.       logfile.print("/");
  230.       logfile.print(now.day(), DEC);
  231.       logfile.print('"');
  232.       logfile.print(",");
  233.       logfile.print(now.hour(), DEC);
  234.       logfile.print(":");
  235.       logfile.print(now.minute(), DEC);
  236.       logfile.print(":");
  237.       logfile.print(now.second(), DEC);
  238. #if ECHO_TO_SERIAL
  239.       Serial.print('"');
  240.       Serial.print(now.year(), DEC);
  241.       Serial.print("/");
  242.       Serial.print(now.month(), DEC);
  243.       Serial.print("/");
  244.       Serial.print(now.day(), DEC);
  245.       Serial.print(" ");
  246.       Serial.print(now.hour(), DEC);
  247.       Serial.print(":");
  248.       Serial.print(now.minute(), DEC);
  249.       Serial.print(":");
  250.       Serial.print(now.second(), DEC);
  251.       Serial.print('"');
  252. #endif //ECHO_TO_SERIAL
  253.  
  254.       delay(10);
  255.  
  256.       logfile.print(", ");
  257.       logfile.print("Shahad Just Signed OUT");
  258. #if ECHO_TO_SERIAL
  259.       Serial.print(", ");
  260.       Serial.print("Shahad Just Signed OUT");
  261.       lcd.setCursor(0, 1);
  262.       lcd.print("Shahad-Sign OUT");
  263.       delay(3000);
  264.       lcd.setCursor(0, 1);
  265.       lcd.print("                ");
  266. #endif //ECHO_TO_SERIAL
  267.       logfile.println();
  268. #if ECHO_TO_SERIAL
  269.       Serial.println();
  270. #endif // ECHO_TO_SERIAL
  271.       // Now we write data to disk! Don't sync too often - requires 2048 bytes of I/O to SD card
  272.       // which uses a bunch of power and takes time
  273.       if ((millis() - syncTime) < SYNC_INTERVAL) return;
  274.       syncTime = millis();
  275.       // blink LED to show we are syncing data to the card & updating FAT!
  276.       logfile.flush();
  277.       delay(1000);
  278.     }
  279.   }
  280.   ///////////////////////////////////////////////////////////////////////// User #001 /end
  281.  
  282.   ///////////////////////////////////////////////////////////////////////// User #002 /start       //***** [1]
  283.  
  284.   if (content.substring(1) == user002ID)                              //***** [2]
  285.   {
  286.     if (user002Status == true) {                                      //***** [3]
  287.       user002Status = false;                                          //***** [4]
  288.  
  289.       DateTime now;
  290.       now = RTC.now();
  291.       logfile.print('"');
  292.       logfile.print(now.year(), DEC);
  293.       logfile.print("/");
  294.       logfile.print(now.month(), DEC);
  295.       logfile.print("/");
  296.       logfile.print(now.day(), DEC);
  297.       logfile.print('"');
  298.       logfile.print(",");
  299.       logfile.print(now.hour(), DEC);
  300.       logfile.print(":");
  301.       logfile.print(now.minute(), DEC);
  302.       logfile.print(":");
  303.       logfile.print(now.second(), DEC);
  304. #if ECHO_TO_SERIAL
  305.       Serial.print('"');
  306.       Serial.print(now.year(), DEC);
  307.       Serial.print("/");
  308.       Serial.print(now.month(), DEC);
  309.       Serial.print("/");
  310.       Serial.print(now.day(), DEC);
  311.       Serial.print(" ");
  312.       Serial.print(now.hour(), DEC);
  313.       Serial.print(":");
  314.       Serial.print(now.minute(), DEC);
  315.       Serial.print(":");
  316.       Serial.print(now.second(), DEC);
  317.       Serial.print('"');
  318. #endif //ECHO_TO_SERIAL
  319.       delay(10);
  320.       logfile.print(", ");
  321.       logfile.print("Ayat Alshaabani Just Signed IN");                           //***** [5]
  322. #if ECHO_TO_SERIAL
  323.       Serial.print(", ");
  324.       Serial.print("Ayat Just Signed IN");                            //***** [6]
  325.       lcd.setCursor(0, 1);
  326.       //        "1234567891234567"    16x characters only #######
  327.       lcd.print("Ayat-Sign IN ");                                      //***** [7]
  328.       delay(3000);
  329.       lcd.setCursor(0, 1);
  330.       lcd.print("                ");
  331. #endif //ECHO_TO_SERIAL
  332.       logfile.println();
  333. #if ECHO_TO_SERIAL
  334.       Serial.println();
  335. #endif // ECHO_TO_SERIAL
  336.       if ((millis() - syncTime) < SYNC_INTERVAL) return;
  337.       syncTime = millis();
  338.       logfile.flush();
  339.       delay(1000);
  340.     }
  341.     else if (user002Status == false) {                                //***** [8]
  342.       user002Status = true;                                           //***** [9]
  343.       DateTime now;
  344.       now = RTC.now();
  345.       logfile.print('"');
  346.       logfile.print(now.year(), DEC);
  347.       logfile.print("/");
  348.       logfile.print(now.month(), DEC);
  349.       logfile.print("/");
  350.       logfile.print(now.day(), DEC);
  351.       logfile.print('"');
  352.       logfile.print(",");
  353.       logfile.print(now.hour(), DEC);
  354.       logfile.print(":");
  355.       logfile.print(now.minute(), DEC);
  356.       logfile.print(":");
  357.       logfile.print(now.second(), DEC);
  358. #if ECHO_TO_SERIAL
  359.       Serial.print('"');
  360.       Serial.print(now.year(), DEC);
  361.       Serial.print("/");
  362.       Serial.print(now.month(), DEC);
  363.       Serial.print("/");
  364.       Serial.print(now.day(), DEC);
  365.       Serial.print(" ");
  366.       Serial.print(now.hour(), DEC);
  367.       Serial.print(":");
  368.       Serial.print(now.minute(), DEC);
  369.       Serial.print(":");
  370.       Serial.print(now.second(), DEC);
  371.       Serial.print('"');
  372. #endif //ECHO_TO_SERIAL
  373.       delay(10);
  374.       logfile.print(", ");
  375.       logfile.print("Ayat Alshaabani Just Signed OUT");                          //***** [10]
  376. #if ECHO_TO_SERIAL
  377.       Serial.print(", ");
  378.       Serial.print("Ayat Just Signed OUT");                           //***** [11]
  379.       lcd.setCursor(0, 1);
  380.       //        "1234567891234567"    16x characters only #######
  381.       lcd.print("Ayat-Sign OUT");                                      //***** [12]
  382.       delay(3000);
  383.       lcd.setCursor(0, 1);
  384.       lcd.print("                ");
  385. #endif //ECHO_TO_SERIAL
  386.       logfile.println();
  387. #if ECHO_TO_SERIAL
  388.       Serial.println();
  389. #endif // ECHO_TO_SERIAL
  390.       if ((millis() - syncTime) < SYNC_INTERVAL) return;
  391.       syncTime = millis();
  392.       logfile.flush();
  393.       delay(1000);
  394.     }
  395.   }
  396.   ///////////////////////////////////////////////////////////////////////// User #002 /end      //***** [13]
  397.  
  398. }// end of LOOP
  399.  
  400.  
  401. void buzz() {
  402.   digitalWrite(7, 1);
  403.   delay(100);
  404.   digitalWrite(7, 0);
  405.   delay(50);
  406.  
  407. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement