recepcion de datos en arduino desde una apps en android

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

desde android envio la plantilla que almacenos asi

  public void sendId() {
       //showErrorLoginDialog(id);
       LoginActivity.usbService.write(id.getBytes());
   }
}

donde id es un string

Moderador: Agregado de etiquetas

Como siempre muchas cosas en el medio que pueden fallar.

Si el problema es comunicación concéntrate en la comunicación ida y vuelta y deja de lado el dispositivo de huella digital.

Una vez que eso esta resuelto vuelves a trabajar con el dispositivo y no todo a la vez con la duda de que puede estar fallando.

Hay que trabajar paso a paso a sabiendas que el paso nuevo implica que el anterior funciona.