Untitled
unknown
plain_text
2 years ago
10 kB
6
Indexable
#include <Servo.h> #include <Keypad.h> #include <LiquidCrystal.h> #include <Adafruit_Fingerprint.h> // fingerprint setup #if (defined(__AVR__) || defined(ESP8266)) && !defined(__AVR_ATmega2560__) // For UNO and others without hardware serial, we must use software serial... // pin #2 is IN from sensor (GREEN wire) // pin #3 is OUT from arduino (WHITE wire) // Set up the serial port to use softwareserial.. SoftwareSerial mySerial(2, 3); #else // On Leonardo/M0/etc, others with hardware serial, use hardware serial! // #0 is green wire, #1 is white #define mySerial Serial1 #endif Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial); uint8_t id; // servo Servo servo; // lcd int row = 0; int col = 0; LiquidCrystal lcd(4, 5, 6, 7, 8, 9); // keypad int step = 0; const byte ROWS = 4; const byte COLS = 4; char keys[ROWS][COLS] = { {'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', '9', 'C'}, {'*', '0', '#', 'D'}}; byte pin_rows[ROWS] = {A0,A1,A2,A3}; byte pin_cols[COLS] = {13, 12, 11, 10}; Keypad keypad = Keypad(makeKeymap(keys), pin_rows, pin_cols, ROWS, COLS); // button A,B states int a = 0; int b = 0; // store password int password = 0; int correctPassword = 12345; // door state int doorOpen = 0; void setup() { Serial.begin(9600); servo.attach(A4); lcd.begin(16, 2); Serial.println("Start"); } void loop() { // variables char key = keypad.getKey(); // start if (doorOpen == 1) { servo.write(135); } if (key == '*') { doorOpen = 0; step = 0; password = 0; servo.write(0); } //start if (step == 0) { lcd.setCursor(row, col); lcd.print("Start "); lcd.setCursor(row, col + 1); lcd.print("press D to continue"); if (key == 'D') { Serial.println("----------------------------------------------------------------"); Serial.println("A: Password"); Serial.println("B: Fingerprint"); Serial.println("----------------------------------------------------------------"); Serial.println("Fingerprint "); Serial.println("----------------------------------------------------------------"); Serial.println("Press A to create a new fingerprint"); Serial.println("Press B to save a fingerprint"); Serial.println("Press C to open by fingerprinting"); Serial.println("Press D to delete a fingerprint"); step = 1; } } // select password or fingerprint if (step == 1) { lcd.setCursor(row, col); lcd.println("A: Password "); lcd.setCursor(row, col + 1); lcd.println("B: Fingerprint "); if (key) { switch (key) { case 'A'://set dieu kien de nhap password a = 1; step = 2; break; case 'B'://dieu kien de chay fingerprints b = 1; step = 2; break; default: break; } } } // password if (a == 1) { lcd.setCursor(row, col); lcd.print("Enter Password "); lcd.setCursor(row, col + 1); lcd.print(" "); password = getPassword(); doorOpen = checkPassword(password, correctPassword); step = 1; a = 0; } // fingerprint if (b == 1) { lcd.setCursor(row, col); lcd.println("Fingerprint "); lcd.setCursor(row, col + 1); lcd.println("Press A,C,D"); // press keypad if (key) { switch (key) { case 'A': lcd.setCursor(row, col); lcd.println("Add a fingerprint"); lcd.setCursor(row, col + 1); lcd.println(" "); delay(3000); //code them van tay //*** getFingerprintEnroll(); break; case 'C': lcd.setCursor(row, col); lcd.println("Put your finger into the fingerprint"); lcd.setCursor(row, col + 1); lcd.println(" " ); delay(3000); //code nhan van tay //*** break; case 'D': lcd.setCursor(row, col); lcd.println("delete a fingerprint"); lcd.setCursor(row, col + 1); lcd.println("Input finger id: "); delay(3000); //code xoa van tay //*** deleteFingerprint(id); break; default: break; } } // step = 1; // b = 0; } } // end loop // functions int getPassword() { String enteredPassword = ""; char key; int i = 0; while (true) { key = keypad.getKey(); if (key) { lcd.setCursor(row + i, col + 1); lcd.println("*"); i++; // Check if the entered password is complete if (key == 'D') { break; } else if (key == '*') { // Clear the entered password if the asterisk key is pressed enteredPassword = ""; } else { // Append the entered digit to the password enteredPassword += key; } } } // Convert the entered password from String to integer int password = enteredPassword.toInt(); return password; } int checkPassword(int password, int correctPassword) { if (password == correctPassword) { lcd.setCursor(row, col); lcd.print("Password Correct "); lcd.setCursor(row, col + 1); lcd.print(" "); delay(1000); return 1; // Password is correct } else { lcd.setCursor(row, col); lcd.print("Password Incorrect"); lcd.setCursor(row, col + 1); lcd.print(" "); delay(1000); return 0; // Password is incorrect } } uint8_t getFingerprintEnroll() { int p = -1; Serial.print("Waiting for valid finger to enroll as #"); Serial.println(id); while (p != FINGERPRINT_OK) { p = finger.getImage(); switch (p) { case FINGERPRINT_OK: Serial.println("Image taken"); break; case FINGERPRINT_NOFINGER: Serial.println("."); break; case FINGERPRINT_PACKETRECIEVEERR: Serial.println("Communication error"); break; case FINGERPRINT_IMAGEFAIL: Serial.println("Imaging error"); break; default: Serial.println("Unknown error"); break; } } // OK success! p = finger.image2Tz(1); switch (p) { case FINGERPRINT_OK: Serial.println("Image converted"); break; case FINGERPRINT_IMAGEMESS: Serial.println("Image too messy"); return p; case FINGERPRINT_PACKETRECIEVEERR: Serial.println("Communication error"); return p; case FINGERPRINT_FEATUREFAIL: Serial.println("Could not find fingerprint features"); return p; case FINGERPRINT_INVALIDIMAGE: Serial.println("Could not find fingerprint features"); return p; default: Serial.println("Unknown error"); return p; } Serial.println("Remove finger"); delay(2000); p = 0; while (p != FINGERPRINT_NOFINGER) { p = finger.getImage(); } Serial.print("ID "); Serial.println(id); p = -1; Serial.println("Place same finger again"); while (p != FINGERPRINT_OK) { p = finger.getImage(); switch (p) { case FINGERPRINT_OK: Serial.println("Image taken"); break; case FINGERPRINT_NOFINGER: Serial.print("."); break; case FINGERPRINT_PACKETRECIEVEERR: Serial.println("Communication error"); break; case FINGERPRINT_IMAGEFAIL: Serial.println("Imaging error"); break; default: Serial.println("Unknown error"); break; } } // OK success! p = finger.image2Tz(2); switch (p) { case FINGERPRINT_OK: Serial.println("Image converted"); break; case FINGERPRINT_IMAGEMESS: Serial.println("Image too messy"); return p; case FINGERPRINT_PACKETRECIEVEERR: Serial.println("Communication error"); return p; case FINGERPRINT_FEATUREFAIL: Serial.println("Could not find fingerprint features"); return p; case FINGERPRINT_INVALIDIMAGE: Serial.println("Could not find fingerprint features"); return p; default: Serial.println("Unknown error"); return p; } // OK converted! Serial.print("Creating model for #"); Serial.println(id); p = finger.createModel(); if (p == FINGERPRINT_OK) { Serial.println("Prints matched!"); } else if (p == FINGERPRINT_PACKETRECIEVEERR) { Serial.println("Communication error"); return p; } else if (p == FINGERPRINT_ENROLLMISMATCH) { Serial.println("Fingerprints did not match"); return p; } else { Serial.println("Unknown error"); return p; } Serial.print("ID "); Serial.println(id); p = finger.storeModel(id); if (p == FINGERPRINT_OK) { Serial.println("Stored!"); } else if (p == FINGERPRINT_PACKETRECIEVEERR) { Serial.println("Communication error"); return p; } else if (p == FINGERPRINT_BADLOCATION) { Serial.println("Could not store in that location"); return p; } else if (p == FINGERPRINT_FLASHERR) { Serial.println("Error writing to flash"); return p; } else { Serial.println("Unknown error"); return p; } return true; } uint8_t deleteFingerprint(uint8_t id) { uint8_t p = -1; p = finger.deleteModel(id); if (p == FINGERPRINT_OK) { Serial.println("Deleted!"); } else if (p == FINGERPRINT_PACKETRECIEVEERR) { Serial.println("Communication error"); } else if (p == FINGERPRINT_BADLOCATION) { Serial.println("Could not delete in that location"); } else if (p == FINGERPRINT_FLASHERR) { Serial.println("Error writing to flash"); } else { Serial.print("Unknown error: 0x"); Serial.println(p, HEX); } return p; }
Editor is loading...