Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <LiquidCrystal_I2C.h>
- #include <MFRC522.h> // for the RFID
- #include <SPI.h> // for the RFID and SD card module
- #include <SD.h> // for the SD card
- #include <RTClib.h> // for the RTC
- #include <Servo.h>
- #define CS_RFID 53
- #define RST_RFID 5
- #define CS_SD 49
- File myFile;
- MFRC522 rfid(CS_RFID, RST_RFID);
- LiquidCrystal_I2C lcd(0x27, 16, 2);
- RTC_DS1307 rtc;
- Servo myservo;
- const int numOfCards = 20;//the number of cards used. this can change as you want
- byte cards[numOfCards][4] = {{0x1A, 0x8C, 0xCD, 0x0A},{0xDA , 0xBF, 0xE8, 0x3B}, {0x09, 0xB3, 0x16, 0xCD}};// array of UIDs of rfid cards
- int n = 0;//n is for the total number of students//j is for to detect the card is valid or not
- int numCard[numOfCards]; //this array content the details of cards that already detect or not .
- String names[numOfCards] = {"Stephen Villorejo","Chris Olivera","Amithyst Ceniza"};//student names
- long sNumbers[numOfCards] = {22209670 , 17918616 , 22205488};//student sNumbers
- const int redLED = 29;
- const int greenLED = 36;
- const int buzzer = 31;
- void setup() {
- pinMode(redLED, OUTPUT);
- pinMode(greenLED, OUTPUT);
- pinMode(buzzer, OUTPUT);
- myservo.attach(28);
- Serial.begin(9600);
- SPI.begin();
- rfid.PCD_Init();
- lcd.init();
- lcd.backlight();
- Serial.print("Initializing SD card...");
- lcd.print("Initializing ");
- lcd.setCursor(2, 2);
- lcd.print("SD card...");
- delay(3000);
- lcd.clear();
- if(!SD.begin(CS_SD)) {
- Serial.println("initialization failed!");
- lcd.print("Initializing ");
- lcd.setCursor(0, 1);
- lcd.print("failed!");
- return;
- }
- Serial.println("initialization done.");
- //lcd.print("Initialization ");
- //lcd.setCursor(3, 3);
- //lcd.print("Done...");
- if(!rtc.begin()) {
- Serial.println("Couldn't find RTC");
- while(1);
- }
- else {
- rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
- }
- if(!rtc.isrunning()) {
- Serial.println("RTC is NOT running!");
- }
- digitalWrite(CS_SD,LOW);
- File myFile = SD.open("test.txt", FILE_WRITE);
- if (myFile) {
- myFile.print(F(" \t<<<< School Bus Passenger Attendance >>>>\n"));
- myFile.println(F("COUNT\tID-NO.\tNAME\t\tDATE\t\tTimeIn\t\tTimeOut"));
- // close the file:
- myFile.close();
- Serial.println(F("done."));
- } else {
- // Serial.println(F("error opening test.txt"));
- }
- digitalWrite(CS_SD,HIGH);
- }
- void loop() {
- DateTime now = rtc.now();
- if (now.hour() < 7 || now.hour() >= 18) {
- }
- printLoopLCD();
- readRFID();
- }
- void readRFID() {
- int j = -1;
- byte card_ID[4];
- if ( ! rfid.PICC_IsNewCardPresent()) {
- return;
- }
- if ( ! rfid.PICC_ReadCardSerial()) {
- return;
- }
- for (byte i = 0; i < rfid.uid.size; i++) {
- card_ID[i] = rfid.uid.uidByte[i];
- }
- for (int i = 0; i < numOfCards; i++) {
- if (card_ID[0] == cards[i][0] && card_ID[1] == cards[i][1] && card_ID[2] == cards[i][2] && card_ID[3] == cards[i][3]) {
- j = i;
- }
- }
- if(j == -1) {
- invalid();
- }
- else if (numCard[j] == 1) {
- alreadyRead(names[j], sNumbers[j], j);
- }
- else {
- logCardData(names[j], sNumbers[j], j);
- }
- delay(500);
- }
- void servo(){//method for servo motor
- int pos = 0; // variable to store the servo position
- for (pos = 90; pos >= 0; pos -= 1) { // goes from 0 degrees to 90 degrees
- // in steps of 1 degree
- myservo.write(pos);
- delay(5);
- }
- delay(5000);
- for (pos = 0; pos <= 90; pos += 1) {// goes from 90 degrees to 0 degrees
- myservo.write(pos);
- delay(5);
- }
- }
- void logCardData(String name, long sNumber, int j){
- displayAllow(name,sNumber);
- DateTime now = rtc.now();
- numCard[j] = 1;
- n++;
- Serial.print(n);
- Serial.print(F("\t"));
- Serial.print(sNumber);
- Serial.print(F("\t"));
- Serial.print(name);
- Serial.print(F("\t"));
- Serial.print(now.year(),DEC);
- Serial.print(F("-"));
- if(now.month()<10){Serial.print("0");Serial.print(now.month(),DEC);}
- else Serial.print(now.month(),DEC);
- Serial.print(F("-"));
- if(now.day()<10){Serial.print("0");Serial.print(now.day(),DEC);}
- else Serial.print(now.day(),DEC);
- Serial.print(F("\t"));
- if(now.hour()<10){Serial.print("0");Serial.print(now.hour(),DEC);}
- else Serial.print(now.hour(),DEC);
- Serial.print(F(":"));
- if(now.minute()<10){Serial.print("0");Serial.print(now.minute(),DEC);}
- else Serial.print(now.minute(),DEC);
- Serial.print(F(":"));
- if(now.second()<10){Serial.print("0");Serial.print(now.second(),DEC);}
- else Serial.print(now.second(),DEC);
- Serial.print(F("\t"));
- Serial.println(F("--:--:-- "));
- digitalWrite(CS_SD,LOW);
- File myFile = SD.open("test.txt", FILE_WRITE);//record the data to the sd card
- if (myFile) {
- myFile.print(n);//print number
- myFile.print(F("\t"));
- myFile.print(sNumber); //print name of student
- myFile.print(F("\t"));
- myFile.print(name); //print name of student
- myFile.print(F("\t"));
- myFile.print(now.year(),DEC); //print year
- myFile.print(F("-"));
- if(now.month()<10){myFile.print("0");myFile.print(now.month(),DEC);}
- else myFile.print(now.month(),DEC); //print month
- myFile.print(F("-"));
- if(now.day()<10){myFile.print("0");myFile.print(now.day(),DEC);}
- else myFile.print(now.day(),DEC);
- myFile.print(F("\t"));
- if(now.hour()<10){myFile.print("0");myFile.print(now.hour(),DEC);}
- else myFile.print(now.hour(),DEC);
- myFile.print(F(":"));
- if(now.minute()<10){myFile.print("0");myFile.print(now.minute(),DEC);}
- else myFile.print(now.minute(),DEC);
- myFile.print(F(":"));
- if(now.second()<10){myFile.print("0");myFile.print(now.second(),DEC);}
- else myFile.print(now.second(),DEC);
- myFile.print(F("\t"));
- myFile.println(F("--:--:--"));
- myFile.close();
- Serial.println(F("done."));
- } else {
- // Serial.println(F("error opening test.txt"));
- }
- digitalWrite(CS_SD,HIGH);
- }
- void invalid(){
- Serial.println(F("Invalid Card."));
- lcd.home ();
- lcd.clear();
- lcd.setCursor (1, 0);
- lcd.print(F("Invalid Card!"));
- digitalWrite(redLED, HIGH);
- tone(buzzer, 300);
- lcd.setCursor (1, 1);
- lcd.print(F("Access Denied!"));
- delay(1500);
- lcd.clear();
- digitalWrite(redLED, LOW);
- noTone(buzzer);
- delay (500);
- }
- void alreadyRead(String name, long sNumber, int j){
- DateTime now = rtc.now();
- numCard[j] = 0;
- n--;
- Serial.print(n);
- Serial.print(F("\t"));
- Serial.print(sNumber);
- Serial.print(F("\t"));
- Serial.print(name);
- Serial.print(F("\t"));
- Serial.print(now.year(),DEC);
- Serial.print(F("-"));
- if(now.month()<10){Serial.print("0");Serial.print(now.month(),DEC);}
- else Serial.print(now.month(),DEC);
- Serial.print(F("-"));
- if(now.day()<10){Serial.print("0");Serial.print(now.day(),DEC);}
- else Serial.print(now.day(),DEC);
- Serial.print(F("\t"));
- Serial.print(F("--:--:--"));
- Serial.print(F("\t"));
- if(now.hour()<10){Serial.print("0");Serial.print(now.hour(),DEC);}
- else Serial.print(now.hour(),DEC);
- Serial.print(F(":"));
- if(now.minute()<10){Serial.print("0");Serial.print(now.minute(),DEC);}
- else Serial.print(now.minute(),DEC);
- Serial.print(F(":"));
- if(now.second()<10){Serial.print("0");Serial.println(now.second(),DEC);}
- else Serial.print(now.second(),DEC);
- Serial.println(" ");
- digitalWrite(CS_SD,LOW);
- File myFile = SD.open("test.txt", FILE_WRITE);
- if (myFile) {
- myFile.print(n);
- myFile.print(F("\t"));
- myFile.print(sNumber);
- myFile.print(F("\t"));
- myFile.print(name);
- myFile.print(F("\t"));
- myFile.print(now.year(),DEC);
- myFile.print(F("-"));
- if(now.month()<10){myFile.print("0");myFile.print(now.month(),DEC);}
- else myFile.print(now.month(),DEC);
- myFile.print(F("-"));
- if(now.day()<10){myFile.print("0");myFile.print(now.day(),DEC);}
- else myFile.print(now.day(),DEC);
- myFile.print(F("\t"));
- myFile.print(F("--:--:--"));
- myFile.print(F("\t"));
- if(now.hour()<10){myFile.print("0");myFile.print(now.hour(),DEC);}
- else myFile.print(now.hour(),DEC);
- myFile.print(F(":"));
- if(now.minute()<10){myFile.print("0");myFile.print(now.minute(),DEC);}
- else myFile.print(now.minute(),DEC);
- myFile.print(F(":"));
- if(now.second()<10){myFile.print("0");myFile.print(now.second(),DEC);}
- else myFile.println(now.second(),DEC);
- myFile.close();
- Serial.println(F("done."));
- } else {
- // Serial.println(F("error opening test.txt"));
- }
- digitalWrite(CS_SD,HIGH);
- digitalWrite(greenLED, HIGH);
- digitalWrite (buzzer, HIGH);
- delay(300);
- digitalWrite(greenLED, LOW);
- digitalWrite (buzzer, LOW);
- lcd.home ();
- lcd.clear();
- lcd.setCursor (3, 0 );
- lcd.print(F("Thank You!"));
- lcd.setCursor (0, 1 );
- lcd.print(F("Enjoy Your Day..."));
- delay(1000);
- servo();
- lcd.clear();
- }
- void printLoopLCD(){
- DateTime now = rtc.now();
- lcd.home();
- lcd.clear();
- lcd.setCursor (0, 0);
- lcd.print(F("Student Count:"));
- lcd.setCursor (14, 0 );
- lcd.print(n);
- lcd.setCursor (0, 1 );
- if(now.month()<10){lcd.print("0");lcd.print(now.month(),DEC);}
- else lcd.print(now.month(),DEC);
- lcd.print(F("."));
- if(now.day()<10){lcd.print("0");lcd.print(now.day(),DEC);}
- else lcd.print(now.day(),DEC);
- lcd.print(F("."));
- lcd.print(now.year(),DEC);
- lcd.setCursor (11, 1);
- if(now.hour()<10){lcd.print("0");lcd.print(now.hour(),DEC);}
- else lcd.print(now.hour(),DEC);
- lcd.print(F(":"));
- if(now.minute()<10){lcd.print("0");lcd.print(now.minute(),DEC);}
- else lcd.print(now.minute(),DEC);
- lcd.print(F(":"));
- if(now.second()<10){lcd.print("0");lcd.print(now.second(),DEC);}
- else lcd.print(now.second(),DEC);
- delay(5000);
- }
- void displayAllow(String name,long sNumber){
- digitalWrite(greenLED, HIGH);
- digitalWrite (buzzer, HIGH);
- delay(300);
- digitalWrite(greenLED, LOW);
- digitalWrite (buzzer, LOW);
- lcd.home ();
- lcd.clear();
- lcd.setCursor (4, 0 );
- lcd.print(F("Welcome!"));
- lcd.setCursor (0, 1 );
- lcd.print(name);
- delay(1000);
- servo();
- lcd.clear();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement