Hola buenas soy nuevo en el tema de Arduino, necesito ayuda al momento de obtener la huella generada por el sensor biométrico modelo ZFM60, estoy usando la librería adafruit fingerprint, espero que me puedan ayudar.
Código corregido
Tu publicación fue ** MOVIDA ** a su ubicación actual ya que es más adecuada.
¿Podría también tomarse unos minutos para Aprenda a usar el foro .
Podrías ser más explícito? no has formulado ninguna pregunta ni has posteado fuente alguno.
A golpe de google he encontrado esto que dado que no sé qué problema tienes, tampoco se si te valdrá:
https://www.vistronica.com/sensores/sensor-biometrico-lector-de-huella-zfm60-detail.html
Todos los dispositivos Adafruit estan soportados por información, librerías y ejemplos.
Si los ejemplos disponibles para enrolar una huella no te funcionan es porque lo tienes mal conectado.
Lee las normas del foro y provee toda la información pertinente.
Que arduino usas? IDE?
Link del fingerprint, esquema de cableado y menciona si es un ejemplo a cual te refieres.
EL problema que me estoy encontrando es que quiero mostrar los bytes que conforma la huella de esta manera :
estoy usando Arduino uno
por favor podrían ayudarme a como imprimir de esa manera la huella
Fijate en el ejemplo show_fingerprint_templates de la librería.
Saludos
Estoy intentando realizar unir dos funciones de Arduino el de Enroll y show fingerprint template al ingresar la letra "E" se ejecuta la función de Enrolar y "G" guardar pero al momento de ejecutar se corta el programa, alguien sabe a que se debe o como puedo solucionarlo?
Moderador:
Por favor, lee las Normas del foro y edita tu código/error usando etiquetas de código.
Ve a edición, luego selecciona todo el código que has publicado, lo cortas y click en </>
Evita las capturas de código que solo tu entiendes y postea el código como te he indicado.
#include <Adafruit_Fingerprint.h>
#if (defined(__AVR__) || defined(ESP8266)) && !defined(__AVR_ATmega2560__)
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);
//int getFingerprintIDez();
uint8_t id;
void setup()
{
while (!Serial);
Serial.begin(9600);
Serial.println("Fingerprint template extractor");
// 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(){
char char_ingreso;
if (Serial.available() > 0)
{
char_ingreso = Serial.read();
if (char_ingreso == 'E'){
Serial.println("LISTO PARA GUARDAR HUELLA");
Serial.println("ESCRIBA EL NUMERO ID# (DEL 1 AL 127) ");
id = readnumber();
if (id == 0) {// ID #0 not allowed, try again!
return;
}
//Serial.println("INGRESAR ID# ");
// Serial.println(id);
while (!getFingerprintEnroll());
}
if (char_ingreso == 'G'){
downloadFingerprintTemplate(1);
}
}
}
uint8_t readnumber(void) {
uint8_t num = 0;
while (num == 0) {
while (! Serial.available());
num = Serial.parseInt();
}
return num;
}
uint8_t getFingerprintEnroll() {
int p = -1;
Serial.print("ESPERANDO HUELLA PARA AGREGAR ID# "); Serial.println(id);
while (p != FINGERPRINT_OK) {
p = finger.getImage();
switch (p) {
case FINGERPRINT_OK:
Serial.println("IMAGEN AGREGADA");
break;
case FINGERPRINT_NOFINGER:
Serial.print(".");
break;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println("ERROR DE COMUNICACION");
break;
case FINGERPRINT_IMAGEFAIL:
Serial.println("EROR DE IMAGEN");
break;
default:
Serial.println("ERROR DESCONOCIDO");
break;
}
}
// OK success!
p = finger.image2Tz(1);
switch (p) {
case FINGERPRINT_OK:
Serial.println("IMAGEN CONVERTIDA");
break;
case FINGERPRINT_IMAGEMESS:
Serial.println("IMAGEN CONFUSA");
return p;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println("ERROR DE COMUNICACION");
return p;
case FINGERPRINT_FEATUREFAIL:
Serial.println("ERROR DE HUELLA");
return p;
case FINGERPRINT_INVALIDIMAGE:
Serial.println("ERROR DE HUELLA SIN CARACTERISTICAS");
return p;
default:
Serial.println("ERROR DESCONOCIDO");
return p;
}
Serial.println("REMOVER EL DEDO POR FAVOR");
delay(2000);
p = 0;
while (p != FINGERPRINT_NOFINGER) {
p = finger.getImage();
}
Serial.print("ID "); Serial.println(id);
p = -1;
Serial.println("VUELVA A COLOCAR EL MISMO DEDO");
while (p != FINGERPRINT_OK) {
p = finger.getImage();
switch (p) {
case FINGERPRINT_OK:
Serial.println("IMAGEN AGREGADA");
break;
case FINGERPRINT_NOFINGER:
Serial.print(".");
break;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println("ERROR DE COMUNICACION");
break;
case FINGERPRINT_IMAGEFAIL:
Serial.println("ERROR DE IMAGEN");
break;
default:
Serial.println("EROR DESCONOCIDO");
break;
}
}
p = finger.image2Tz(2);
switch (p) {
case FINGERPRINT_OK:
Serial.println("IMAGEN CONVERTIDA");
break;
case FINGERPRINT_IMAGEMESS:
Serial.println("IMAGEN CONFUSA");
return p;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println("ERROR DE COMUNICACION");
return p;
case FINGERPRINT_FEATUREFAIL:
Serial.println("ERROR DE HUELLA");
return p;
case FINGERPRINT_INVALIDIMAGE:
Serial.println("ERROR DE HUELLA");
return p;
default:
Serial.println("ERROR DESCONOCIDO");
return p;
}
Serial.print("CREANDO MODELO PARA ID #"); Serial.println(id);
p = finger.createModel();
if (p == FINGERPRINT_OK) {
Serial.println("IMAGEN CORRECTA");
} else if (p == FINGERPRINT_PACKETRECIEVEERR) {
Serial.println("ERROR DE COCMUNICACION");
return p;
} else if (p == FINGERPRINT_ENROLLMISMATCH) {
Serial.println("ERROR DE COINCIDENCIA");
return p;
} else {
Serial.println("ERROR DESCONOCIDO");
return p;
}
Serial.print("ID "); Serial.println(id);
p = finger.storeModel(id);
if (p == FINGERPRINT_OK) {
Serial.println("HUELLA ALMACENADA");
} else if (p == FINGERPRINT_PACKETRECIEVEERR) {
Serial.println("ERROR DE COMUNICACION");
return p;
} else if (p == FINGERPRINT_BADLOCATION) {
Serial.println("NO SE PUDO ALMACENAR EN ESA UBICACION");
return p;
} else if (p == FINGERPRINT_FLASHERR) {
Serial.println("ERROR AL ESCRIBIR EN EL FLASH");
return p;
} else {
Serial.println("ERROR DESCONOCIDO");
return p;
}
return true;
}
uint8_t downloadFingerprintTemplate(uint16_t cod)
{
Serial.print("Attempting to load #"); Serial.println(cod);
uint8_t p = finger.loadModel(cod);
switch (p) {
case FINGERPRINT_OK:
Serial.print("Template "); Serial.print(cod); Serial.println(" loaded");
break;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println("Communication error");
return p;
default:
Serial.print("Unknown error "); Serial.println(p);
return p;
}
// OK success!
Serial.print("Attempting to get #"); Serial.println(cod);
p = finger.getModel();
switch (p) {
case FINGERPRINT_OK:
Serial.print("Template "); Serial.print(cod); Serial.println(" transferring:");
break;
default:
Serial.print("ERROR DESCONOCIDO "); Serial.println(p);
return p;
}
// one data packet is 267 bytes. in one data packet, 11 bytes are 'usesless' :D
uint8_t bytesReceived[534]; // 2 data packets
memset(bytesReceived, 0xff, 534);
uint32_t starttime = millis();
int i = 0;
while (i < 534 && (millis() - starttime) < 20000) {
if (mySerial.available()) {
bytesReceived[i++] = mySerial.read();
}
}
Serial.print(i); Serial.println(" bytes read.");
Serial.println("Decoding packet...");
uint8_t fingerTemplate[512]; // the real template
memset(fingerTemplate, 0xff, 512);
// filtering only the data packets
int uindx = 9, index = 0;
memcpy(fingerTemplate + index, bytesReceived + uindx, 256); // first 256 bytes
uindx += 256; // skip data
uindx += 2; // skip checksum
uindx += 9; // skip next header
index += 256; // advance pointer
memcpy(fingerTemplate + index, bytesReceived + uindx, 256); // second 256 bytes
for (int i = 0; i < 512; ++i) {
//Serial.print("0x");
printHex(fingerTemplate[i], 2);
//Serial.print(", ");
}
Serial.println("\ndone.");
return p;
}
void printHex(int nume, int precision) {
char tmp[16];
char format[128];
sprintf(format, "%%.%dX", precision);
sprintf(tmp, format, nume);
Serial.print(tmp);
}
Seguramente se está quedando sin RAM, suponiendo que usas el Uno al que te refieres en el otro tema que tienes abierto sobre la misma temática.
Saludos
Moderador:
Por favor, no doble postees.
Abrir temas similares es hacernos perder el tiempo.
La razónes que alguien que te da una buena respuesta puede tomarse 15 minutos o mas (yo doy fe de tomarme horas en algunas ocasiones) y por tu parte terminan preguntando en dos sitios por lo mismo, lo cual no solo es una perdida de nuestro tiempo sino tambien una falta de respeto a los que queremos ayudarte.
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.