estoy usando el sensor de huellas r307 y uso la libreria FPM.h , pero al tener almacenamiento limitado, yo capturo la plantilla generada y luego la envio a una BD en android donde es almacenada para luego llamarla dependiendo a la identificacion que le envie, luego de esto borro la plantilla. pero cuando la apps me devuelve la plantilla no soy capaz de recibirla, estoy usando Serial.readBytes() para recibirla; la idea es recibirla y luego otra vez almacenarla en la flash del sensor y darle un ID para cuando necesite comparar pues ya tenga una plantilla inscrita para comparar.
#include <SoftwareSerial.h>
#include <FPM.h>
#define BUFF_SZ 512
#define TEMPLATE_TO_MOVE 0
SoftwareSerial mySerial(2, 3);
uint8_t buff[BUFF_SZ];
FPM finger;
char aux='0';
boolean flag=false;
boolean flag2=false;
boolean flag3=false;
boolean scaner=false;
int llenar=0;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
mySerial.begin(57600);
if (finger.begin(&mySerial)) {
Serial.println("Z");
} else {
Serial.println("X");
while (1) yield();
}
}
void loop() {
// put your main code here, to run repeatedly:
if(flag==false){
while(Serial.available()){
if(aux=='2'){
scaner=true;
}
}
}else{
captureTemplate();
}
if(scaner==true){
if(flag2==true){
sendTemplate(TEMPLATE_TO_MOVE);
}else{
flag=true;
}
}
}
void captureTemplate(){
if(flag3==false){
Serial.print("R");
flag3=true;
}
while(Serial.available()>0){
Serial.readBytes(buff,512);
llenar=1;
}
if(llenar==1){
flag2=true;
flag3=false;
llenar=0;
}
}
void sendTemplate(uint16_t id){
int p = finger.uploadModel();
switch (p) {
case FINGERPRINT_OK:
// Serial.println("Starting template upload");
break;
case FINGERPRINT_PACKETRECIEVEERR:
// Serial.println("Comms error");
return;
case FINGERPRINT_PACKETRESPONSEFAIL:
// Serial.println("Did not receive packet");
return;
// default:
// Serial.println("Unknown error");
// return;
}
yield();
finger.writeRaw(buff, BUFF_SZ);
p = finger.storeModel(id);
switch (p) {
case FINGERPRINT_OK:
scaner=false;
// Serial.print("Template stored at ID "); Serial.println(id);
break;
case FINGERPRINT_PACKETRECIEVEERR:
// Serial.println("Comms error");
break;
case FINGERPRINT_BADLOCATION:
// Serial.println("Could not store in that location");
break;
case FINGERPRINT_FLASHERR:
// Serial.println("Error writing to flash");
break;
//default:
// Serial.println("Unknown error");
}
return;
}
cuando recibo un dos de la apps entro en modo scaner, y le envio la R para que la apps sepa cuando enviarme la plantilla;
void captureTemplate(){
if(flag3==false){
Serial.print("R");
flag3=true;
}
while(Serial.available()>0){
Serial.readBytes(buff,512);
llenar=1;
}
if(llenar==1){
flag2=true;
flag3=false;
llenar=0;
}
}
esta es la parte que cre estar haciendo mal