Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- [code]
- #include <SD.h> //load the SD library
- #include <SPI.h> //load the SPI communication library
- #include <RTClib.h>
- #include "Wire.h" // imports the wire library for talking over I2C
- #include "Adafruit_PN532.h" // import the RFID sensor Library
- #define LOG_INTERVAL 1000 // mills between entries (reduce to take more/faster data)
- #define SYNC_INTERVAL 1000 // mills between calls to flush() - to write data to the card
- uint32_t syncTime = 0; // time of last sync()
- #define ECHO_TO_SERIAL 1 // echo data to serial port
- #define WAIT_TO_START 0 // Wait for serial input in setup()
- // the digital pins that connect to the LEDs
- #define redLEDpin 4
- #define greenLEDpin 5
- #define PN532_IRQ (2) //defines pins connected to the IRQ and reset lines.
- #define PN532_RESET (3)
- Adafruit_PN532 nfc(PN532_IRQ, PN532_RESET);; // create sensor object
- RTC_PCF8523 rtc; // define the Real Time Clock object
- const int chipSelect = 10; //For data logging shield, digital pin 10 used for SD cs line
- File logfile; //Variable for working with our file object
- void error(char *str)
- {
- Serial.print("error: ");
- Serial.println(str);
- // red LED indicates error
- digitalWrite(redLEDpin, HIGH);
- while(1);
- }
- void setup(void){
- Serial.begin(115200);
- Serial.println("Hello!");
- //RFID Setup
- nfc.begin();
- uint32_t versiondata = nfc.getFirmwareVersion();
- if (! versiondata) {
- Serial.print("Didn't find PN53x board");
- while (1); // halt
- }
- // Got ok data, print it out!
- Serial.print("Found chip PN5"); Serial.println((versiondata>>24) & 0xFF, HEX);
- Serial.print("Firmware ver. "); Serial.print((versiondata>>16) & 0xFF, DEC);
- Serial.print('.'); Serial.println((versiondata>>8) & 0xFF, DEC);
- // configure board to read RFID tags
- nfc.SAMConfig();
- Serial.println("Waiting for an ISO14443A Card ...");
- // initialize the SD card
- Serial.print("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)) {
- error("Card failed, or not present");
- }
- Serial.println("card initialized.");
- // create a new file
- char filename[] = "LOGGER00.CSV";
- for (uint8_t i = 0; i < 100; i++) {
- filename[6] = i/10 + '0';
- filename[7] = i%10 + '0';
- if (! SD.exists(filename)) {
- // only open a new file if it doesn't exist
- logfile = SD.open(filename, FILE_WRITE);
- break; // leave the loop!
- }
- }
- if (! logfile) {
- error("couldnt create file");
- }
- Serial.print("Logging to: ");
- Serial.println(filename);
- Serial.println("");
- // connect to RTC
- Wire.begin();
- if (!rtc.begin()) {
- logfile.println("RTC failed");
- #if ECHO_TO_SERIAL
- Serial.println("RTC failed");
- #endif //ECHO_TO_SERIAL
- }
- }
- void loop(void)
- {
- int motor = 7;
- uint8_t success;
- uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 }; // Buffer to store the returned UID
- uint8_t uidLength; // Length of the UID (4 or 7 bytes depending on ISO14443A card type)
- int i = 0;
- //Wait for an ISO14443A type cards (Mifare, etc.)
- success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uidLength);
- if (success) {
- // Display some basic information about the card
- Serial.println("Found an ISO14443A card");
- Serial.print(" UID Length: ");Serial.print(uidLength, DEC);Serial.println(" bytes");
- Serial.print(" UID Value: ");
- nfc.PrintHex(uid, uidLength);
- Serial.println("");
- if (uidLength == 4)
- {
- // We probably have a Mifare Classic card ...
- //Serial.println("Seems to be a Mifare Classic card (4 byte UID)");
- // Now we need to try to authenticate it for read/write access
- // Serial.println("Trying to authenticate block 4 with default KEYA value");
- uint8_t keya[6] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };
- success = nfc.mifareclassic_AuthenticateBlock(uid, uidLength, 4, 0, keya);
- if (success)
- {
- //Serial.println("Sector 1 (Blocks 4..7) has been authenticated");
- uint8_t data[16];
- success = nfc.mifareclassic_ReadDataBlock(4, data);
- if (success)
- {
- // Data seems to have been read ... spit it out
- //Serial.println("Reading Block 4:");
- //nfc.PrintHexChar(data, 16);
- //Serial.println("");
- // Wait a bit before reading the card again
- delay(1000);
- }
- else
- {
- Serial.println("Ooops ... unable to read the requested block. Try another key?");
- }
- }
- else
- {
- Serial.println("Ooops ... authentication failed: Try another key?");
- }
- }
- {
- logfile.println("date, time, IDnumber");
- #if ECHO_TO_SERIAL
- Serial.println("date, time, IDnumber");
- #endif //ECHO_TO_SERIAL
- DateTime now;
- // delay for the amount of time we want between readings
- delay((LOG_INTERVAL -1) - (millis() % LOG_INTERVAL));
- digitalWrite(greenLEDpin, HIGH);
- // log milliseconds since starting
- uint32_t m = millis();
- //logfile.print(m); // milliseconds since start
- //logfile.print(", ");
- //#if ECHO_TO_SERIAL
- //Serial.print(m); // milliseconds since start
- //Serial.print(", ");
- //#endif
- // fetch the time
- now = rtc.now();
- // log time
- //logfile.print(now.unixtime()); // seconds since 1/1/1970
- //logfile.print(", ");
- //logfile.print('"');
- logfile.print(now.year(), DEC);
- logfile.print("/");
- logfile.print(now.month(), DEC);
- logfile.print("/");
- logfile.print(now.day(), DEC);
- logfile.print(",");
- #if ECHO_TO_SERIAL
- Serial.print(now.year(), DEC);
- Serial.print("/");
- Serial.print(now.month(), DEC);
- Serial.print("/");
- Serial.print(now.day(), DEC);
- Serial.print(", ");
- #endif //ECHO_TO_SERIAL
- logfile.print(now.hour(), DEC);
- logfile.print(":");
- logfile.print(now.minute(), DEC);
- logfile.print(":");
- logfile.print(now.second(), DEC);
- logfile.print(",");
- #if ECHO_TO_SERIAL
- //Serial.print(now.unixtime()); // seconds since 1/1/1970
- //Serial.print(", ");
- //Serial.print('"');
- Serial.print(now.hour(), DEC);
- Serial.print(":");
- Serial.print(now.minute(), DEC);
- Serial.print(":");
- Serial.print(now.second(), DEC);
- #endif //ECHO_TO_SERIAL
- for (uint8_t i=0; i < uidLength; i++)
- {
- if(uid[i]<0x10);
- }
- logfile.print(uid[i], HEX); // Write id number to the SD card
- logfile.print(",");
- //logfile.close(); //Close the file
- #if ECHO_TO_SERIAL
- Serial.print(", ");
- Serial.print(F(" 0x")); Serial.print(uid[i], HEX);
- //nfc.PrintHex(uid, uidLength);
- Serial.println("");
- #endif //ECHO_TO_SERIAL
- logfile.println();
- #if ECHO_TO_SERIAL
- Serial.println();
- #endif // ECHO_TO_SERIAL
- if ((millis() - syncTime) < SYNC_INTERVAL) return;
- syncTime = millis();
- // blink LED to show we are syncing data to the card & updating FAT!
- digitalWrite(redLEDpin, HIGH);
- logfile.flush();
- digitalWrite(redLEDpin, LOW);
- // code for vibrating motor disc
- pinMode(success, INPUT);
- pinMode(motor, OUTPUT);
- if(digitalRead(success) == HIGH) { //If RFID card is detected, turn motor on
- digitalWrite(motor, HIGH);
- delay(500); //Hold vibration
- digitalWrite(motor, LOW); //Turn motor off
- }
- }
- }
- }
- [/code]
Add Comment
Please, Sign In to add comment