En este tutorial veremos como crear un dispositivo para la apertura una puerta, a través de tres métodos. Uno será con un módulo finger print, otro con teclado matricial de 4 x 4, y también con un módulo bluetooth hc-05, y una aplicación hecha en App inventor. Veremos como armar el circuito, el código fuente para arduino, la aplicación hecha en app inventor.
Tal vez pueda interesarte proyectos en arduino, pic, robótica, telecomunicaciones, suscribete en http://www.youtube.com/user/carlosvolt?sub_confirmation=1 mucho videos con código fuentes completos y diagramas
Componentes electrónicos
Arduino Nano
El Arduino Nano es una placa pequeña, completa y compatible con la placa de pruebas basada en el ATmega328 (Arduino Nano 3.x). Tiene más o menos la misma funcionalidad del Arduino Duemilanove, pero en un paquete diferente. Solo carece de un conector de alimentación de CC y funciona con un cable USB Mini-B en lugar de uno estándar.
Microcontrolador | ATmega328 |
Arquitectura | AVR |
Tensión de funcionamiento | 5 V |
Memoria flash | 32 KB de los cuales 2 KB utiliza el gestor de arranque |
SRAM | 2 KB |
Velocidad de reloj | 16 MHz |
Pines analógicos IN | 8 |
EEPROM | 1 KB |
Corriente CC por pines de E / S | 40 mA (pines de E / S) |
Voltaje de entrada | 7-12 V |
Pines de E / S digitales | 22 (6 de los cuales son PWM) |
Salida PWM | 6 |
El consumo de energía | 19 mA |
Tamaño de PCB | 18 x 45 mm |
Peso | 7 g |
Diagrama de pines
Buzzer
Pines hembra
Módulo Relay
ESPECIFICACIONES TÉCNICAS
- Voltaje de Operación: 5V DC
- Señal de Control: TTL (3.3V o 5V)
- Nº de Relays (canales): 1 CH
- Capacidad máx: 10A/250VAC, 10A/30VDC
- Corriente máx: 10A (NO), 5A (NC)
- Tiempo de acción: 10 ms / 5 ms
- Para activar salida NO: 0 Voltios
Zócalo para arduino nano
Un teclado de membrana de 4 x 4
Pines macho a 90 grados
Display oled con driver SSD1306
El rendimiento de la pantalla es mejor que la pantalla LCD tradicional, también un menor consumo.
Especificaciones:
IC del controlador: SSD1306
Tamaño: OLED de 0,91 pulgadas
Resolución: 128 x 32
Tamaño: 38 * 12 mm
Número de pines: 4 pines
Tipo de interfaz:
interfaz IIC
Color de la pantalla: Blanco / azul
Descripción de los pines:
GND: Power Ground
VCC: Power + (DC 3.3 ~ 5v)
Temperatura de funcionamiento: -40 ~ 85 ℃
SCL: Línea de reloj
SDA: Línea de datos
Pantalla OLED, sin necesidad de retroiluminación, autoiluminación, Color de la pantalla: azul.
El rendimiento de la pantalla es mejor que la pantalla LCD tradicional, también menor consumo; IIC (comunicaciones I2C) simplifica las conexiones.
Úselo con Arduino, ESP8266, ESP32, STM32, etc. 3.3 a 5v de voltaje
Módulos hc-05
Sólo en el caso que quieras ver los datos recibidos en tu celular podrás conectar este módulo, por eso es opcional y no obligatorio
- Funciona como dispositivo maestro y esclavo bluetooth
- Configurable mediante comandos AT
- Bluetooth V2.0+EDR
- Frecuencia de operación: 2.4 GHz Banda ISM
- Modulación: GFSK (Gaussian Frequency Shift Keying)
- Potencia de transmisión: <=4dBm, Class 2
- Sensibilidad: <=-84dBm @ 0.1% BER
- Seguridad: Autenticación y encriptación
- Perfiles Bluetooth: Puerto serie bluetooth.
- Distancia de hasta 10 metros en condiciones óptimas
- Voltaje de Operación: 3.6 VDC a 6 VDC
- Consumo Corriente: 30 mA a 50mA
- Chip: BC417143
- Versión o firmware: 3.0-20170609
- Baudios por defecto: 38400
- Baudios soportados: 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200.
- Interfaz: Serial TTL
- Antena: Integrada en el PCB
- Seguridad: Autenticación y encriptación (Contraseña por defecto: 0000 o 1234)
- Temperatura de trabajo (Max): 75°C
- Temperatura de trabajo (Min): -20°C
- Dimensiones: 4.4 x 1.6 x 0.7 cm
Módulo fingerprint Open Smart
Descargar Manual –> R308-fingerprint-module-user-manual_English
Pines macho
Un PCB
Descargar archivo gerber —> fingerprint
Circuito
Cables dupont hembra hembra
Librería
Descargar librería —> AdaFingerprint
Código fuente del proyecto
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 |
#include <Adafruit_Fingerprint.h> #include <SoftwareSerial.h> #include <Arduino.h> #include <U8g2lib.h> #ifdef U8X8_HAVE_HW_SPI #include <SPI.h> #endif #ifdef U8X8_HAVE_HW_I2C #include <Wire.h> #endif U8G2_SSD1306_128X32_UNIVISION_1_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE); SoftwareSerial mySerial(2, 3); Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial); #include <Keypad.h> char password[]="1234";//Contraseña de 4 dígitos char clave[4];//Aqui guardamos los caracteres presionados en el teclado int conteo=0; //Esta variable se aumente en 1 x cada tecla precionada String cadena = ""; const byte FILAS = 4; //Numero de filas del teclado que se esta usando const byte COLUMNAS = 4; //Numero de columnas del teclado que se esta usando //Mapa del teclado que estamos usando char mapaTeclas[FILAS][COLUMNAS] = { {'1','2','3','A'}, {'4','5','6','B'}, {'7','8','9','C'}, {'*','0','#','D'} }; byte pinesFilas[FILAS] = {11, 10, 9, 8}; //Pines donde estan las filas del teclado byte pinesColumnas[COLUMNAS] = {7, 6, 5, 4}; //Pines donde estan las columnas del teclado Keypad teclapad = Keypad(makeKeymap(mapaTeclas), pinesFilas, pinesColumnas, FILAS, COLUMNAS); //Inicializamos el teclado matricial int pinA0 = A0;//Módulo relay int pin12 = 12;//Buzzer int estado = 0; String numID; void setup() { while (!Serial); // Para Yun/Leo/Micro/Zero/... u8g2.begin();//Inicializamos el display Serial.begin(9600);//Velocidad del puerto serie arduino pinMode(pinA0, OUTPUT); pinMode(pin12, OUTPUT); Serial.println("Inicio detección del módulo fingerprint"); // Velocidad de transmisión de datos entre el arduino y el módulo fingerprint finger.begin(57600); if (finger.verifyPassword()) { Serial.println("¡Sensor de huellas dactilares conectado ok!"); } else { Serial.println("Revisa la conexión del sensor de huellas :("); while (1); } Serial.println("Esperando un huella válida..."); displayOled();//Llamado de la función displayOled(), para arrancar el display con la leyenda "Ingrese huella clave o App" } void loop() { //lee las cadenas de caracteres que ingresan al puerto serie if (Serial.available()) { cadena = String(""); while (Serial.available()) { cadena = cadena + char(Serial.read());//Lee caracter por caracter y concatena a la variable cadena delay(1); } } if (cadena == "abrir"){ Serial.println("Apertura x bluetooth"); //Función para apertura x bluetoth abrirBlue(); } //Función para el trabajar con el sensor de huellas dactilares datosFingerprint(); //Función para trabajar con el teclado teclado(); } // Devuelve -1 si falla, de lo contrario devuelve ID # int datosFingerprint() { uint8_t p = finger.getImage(); if (p != FINGERPRINT_OK) return -1; p = finger.image2Tz(); if (p != FINGERPRINT_OK) return -1; p = finger.fingerFastSearch(); if (p != FINGERPRINT_OK) return -1; //Encontrado una coincidencia! Serial.print("Huella ID #"); Serial.print(finger.fingerID); Serial.print(" con una confianza de "); Serial.println(finger.confidence); //Activar el buzzer durante 100 mili segundos bip(100); numID = String(finger.fingerID); //Convierte el id en cadena para ser compatible con el display displayOled2();// LLama a esta función para mostrar el número de huella leido relay();//Activa el relay x 3 segundos displayOled();//Pasado el tiempo vuelve a mostrar la leyenda "ingrese huella clave o App" return finger.fingerID; } //Apertura x teclado void teclado(){ char tecla = teclapad.getKey(); //se alamacena en la variable "tecla" el caracter presionado if (tecla != NO_KEY) //¿Se ha presionado alguna tecla? { clave[conteo]=tecla; //Almacenamos caracter por caracter en el arreglo clave[] Serial.println(clave[conteo]); //Se muestra en el puerto serial la tecla presionada conteo=conteo+1; //Se incremente en 1 la variable conteo if(conteo==4) //Si 4 teclas fueron presionadas se verifica si la clave es la correcta o no { if(clave[0]==password[0]&&clave[1]==password[1]&&clave[2]==password[2]&&clave[3]==password[3]) { bip(100);//Suena un solo bip en el buzzer indicando que la calve es correcta //Activamos el módulo relay durante 3 segundos para la apertura de una puerta Serial.println("clave correcta apertura de puerta"); displayOled3();// se muestra en el display "Clave correcta" relay();//Activa el relay x 3 segundos conteo=0;//Seteamos la variable conteo al valor 0 } //Si la clave es incorrecta sonará dos veces el buzzer if (conteo!=0){ displayOled4(); bip(100); bip(100); } conteo=0; //Seteamos la variable conteo al valor 0 displayOled();//Vuelve a mostrar en display Ingrese huella clave o app } } } // void abrirBlue(){ bip(100); displayOled5();// Muestra en el displey "Apertura x App" relay();//Activa el relay x 3 segundos cadena = ""; displayOled();//Vuelve a mostrar en display Ingrese huella clave o app } //Sonido del buzzer void bip(int demora){ digitalWrite(pin12, HIGH); delay(demora); digitalWrite(pin12, LOW); delay(demora); } void relay(){ digitalWrite(pinA0,HIGH); delay(3000); digitalWrite(pinA0,LOW); } //Nos muestra en el display Ingrese huella void displayOled(){ u8g2.firstPage(); do { u8g2.setFont(u8g2_font_ncenB10_tr); u8g2.drawStr(0,10,"Ingrese huella"); u8g2.drawStr(0,24,"clave o App"); } while ( u8g2.nextPage() ); } //Nos muestra en el display el número de la huella obtenida "Huella #" void displayOled2(){ u8g2.firstPage(); do { u8g2.setFont(u8g2_font_ncenB10_tr); u8g2.drawStr(0,24,"Huella #"); u8g2.drawStr(65, 24, numID.c_str()); } while ( u8g2.nextPage() ); } //Nos muestra en el display Clave correcta" void displayOled3(){ u8g2.firstPage(); do { u8g2.setFont(u8g2_font_ncenB10_tr); u8g2.drawStr(0,24,"Clave correcta"); } while ( u8g2.nextPage() ); } //Nos muestra en el display "Clave incorrecta" void displayOled4(){ u8g2.firstPage(); do { u8g2.setFont(u8g2_font_ncenB10_tr); u8g2.drawStr(0,24,"Clave incorrecta"); } while ( u8g2.nextPage() ); } //Nos muestra en el display Apertura x App" void displayOled5(){ u8g2.firstPage(); do { u8g2.setFont(u8g2_font_ncenB10_tr); u8g2.drawStr(0,24,"Apertura x App"); } while ( u8g2.nextPage() ); } |
Código Fuente enroll
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 |
/*************************************************** This is an example sketch for our optical Fingerprint sensor Designed specifically to work with the Adafruit BMP085 Breakout ----> http://www.adafruit.com/products/751 These displays use TTL Serial to communicate, 2 pins are required to interface Adafruit invests time and resources providing this open source code, please support Adafruit and open-source hardware by purchasing products from Adafruit! Written by Limor Fried/Ladyada for Adafruit Industries. BSD license, all text above must be included in any redistribution ****************************************************/ #include <Adafruit_Fingerprint.h> #include <SoftwareSerial.h> uint8_t id; uint8_t getFingerprintEnroll(); // Software serial for when you dont have a hardware serial port // pin #2 is IN from sensor (GREEN wire) // pin #3 is OUT from arduino (WHITE wire) // On Leonardo/Micro/Yun, use pins 8 & 9. On Mega, just grab a hardware serialport SoftwareSerial mySerial(2, 3); Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial); // On Leonardo/Micro or others with hardware serial, use those! #0 is green wire, #1 is white //Adafruit_Fingerprint finger = Adafruit_Fingerprint(&Serial1); void setup() { while (!Serial); // For Yun/Leo/Micro/Zero/... delay(500); Serial.begin(9600); Serial.println("Adafruit Fingerprint sensor enrollment"); // set the data rate for the sensor serial port finger.begin(57600); if (finger.verifyPassword()) { Serial.println("Found fingerprint sensor!"); } else { Serial.println("Did not find fingerprint sensor :("); while (1); } } uint8_t readnumber(void) { uint8_t num = 0; boolean validnum = false; while (1) { while (! Serial.available()); char c = Serial.read(); if (isdigit(c)) { num *= 10; num += c - '0'; validnum = true; } else if (validnum) { return num; } } } void loop() // run over and over again { Serial.println("Ready to enroll a fingerprint! Please Type in the ID # you want to save this finger as..."); id = readnumber(); Serial.print("Enrolling ID #"); Serial.println(id); while (! getFingerprintEnroll() ); } 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; } } |
Código Fuente delete
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
/*************************************************** This is an example sketch for our optical Fingerprint sensor Designed specifically to work with the Adafruit Fingerprint sensor ----> http://www.adafruit.com/products/751 These displays use TTL Serial to communicate, 2 pins are required to interface Adafruit invests time and resources providing this open source code, please support Adafruit and open-source hardware by purchasing products from Adafruit! Written by Limor Fried/Ladyada for Adafruit Industries. BSD license, all text above must be included in any redistribution ****************************************************/ #include <Adafruit_Fingerprint.h> #include <SoftwareSerial.h> uint8_t getFingerprintEnroll(uint8_t id); // Software serial for when you dont have a hardware serial port // pin #2 is IN from sensor (GREEN wire) // pin #3 is OUT from arduino (WHITE wire) // On Leonardo/Micro/Yun, use pins 8 & 9. On Mega, just grab a hardware serialport SoftwareSerial mySerial(2, 3); Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial); // On Leonardo/Micro or others with hardware serial, use those! #0 is green wire, #1 is white //Adafruit_Fingerprint finger = Adafruit_Fingerprint(&Serial1); void setup() { Serial.begin(9600); Serial.println("Delete Finger"); // set the data rate for the sensor serial port finger.begin(57600); if (finger.verifyPassword()) { Serial.println("Found fingerprint sensor!"); } else { Serial.println("Did not find fingerprint sensor :("); while (1); } } void loop() // run over and over again { while (!Serial); // For Yun/Leo/Micro/Zero/... delay(500); Serial.println("Type in the ID # you want delete..."); uint8_t id = 0; while (true) { while (! Serial.available()); char c = Serial.read(); if (! isdigit(c)) break; id *= 10; id += c - '0'; } Serial.print("deleting ID #"); Serial.println(id); deleteFingerprint(id); } 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"); return p; } else if (p == FINGERPRINT_BADLOCATION) { Serial.println("Could not delete in that location"); return p; } else if (p == FINGERPRINT_FLASHERR) { Serial.println("Error writing to flash"); return p; } else { Serial.print("Unknown error: 0x"); Serial.println(p, HEX); return p; } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 |
/*************************************************** This is an example sketch for our optical Fingerprint sensor Designed specifically to work with the Adafruit BMP085 Breakout ----> http://www.adafruit.com/products/751 These displays use TTL Serial to communicate, 2 pins are required to interface Adafruit invests time and resources providing this open source code, please support Adafruit and open-source hardware by purchasing products from Adafruit! Written by Limor Fried/Ladyada for Adafruit Industries. BSD license, all text above must be included in any redistribution ****************************************************/ #include <Adafruit_Fingerprint.h> #include <SoftwareSerial.h> int getFingerprintIDez(); // pin #2 is IN from sensor (GREEN wire) // pin #3 is OUT from arduino (WHITE wire) SoftwareSerial mySerial(2, 3); Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial); // On Leonardo/Micro or others with hardware serial, use those! #0 is green wire, #1 is white //Adafruit_Fingerprint finger = Adafruit_Fingerprint(&Serial1); void setup() { while (!Serial); // For Yun/Leo/Micro/Zero/... Serial.begin(9600); Serial.println("Adafruit finger detect test"); // set the data rate for the sensor serial port finger.begin(57600); if (finger.verifyPassword()) { Serial.println("Found fingerprint sensor!"); } else { Serial.println("Did not find fingerprint sensor :("); while (1); } Serial.println("Waiting for valid finger..."); } void loop() // run over and over again { getFingerprintIDez(); delay(50); //don't ned to run this at full speed. } uint8_t getFingerprintID() { uint8_t p = finger.getImage(); switch (p) { case FINGERPRINT_OK: Serial.println("Image taken"); break; case FINGERPRINT_NOFINGER: Serial.println("No finger detected"); return p; case FINGERPRINT_PACKETRECIEVEERR: Serial.println("Communication error"); return p; case FINGERPRINT_IMAGEFAIL: Serial.println("Imaging error"); return p; default: Serial.println("Unknown error"); return p; } // OK success! p = finger.image2Tz(); 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! p = finger.fingerFastSearch(); if (p == FINGERPRINT_OK) { Serial.println("Found a print match!"); } else if (p == FINGERPRINT_PACKETRECIEVEERR) { Serial.println("Communication error"); return p; } else if (p == FINGERPRINT_NOTFOUND) { Serial.println("Did not find a match"); return p; } else { Serial.println("Unknown error"); return p; } // found a match! Serial.print("Found ID #"); Serial.print(finger.fingerID); Serial.print(" with confidence of "); Serial.println(finger.confidence); } // returns -1 if failed, otherwise returns ID # int getFingerprintIDez() { uint8_t p = finger.getImage(); if (p != FINGERPRINT_OK) return -1; p = finger.image2Tz(); if (p != FINGERPRINT_OK) return -1; p = finger.fingerFastSearch(); if (p != FINGERPRINT_OK) return -1; // found a match! Serial.print("Found ID #"); Serial.print(finger.fingerID); Serial.print(" with confidence of "); Serial.println(finger.confidence); return finger.fingerID; } |
PROYECTOS RECOMENDADOS