shield Ethernet + Fingerprint No me funcionan juntos

Hola Hola

Tengo un sensor dactilar ( compatible con la libreria adafruit ) que funciona muy bien , pero el problema que tengo es que no puedo combinarlo con con las funciones de cliente de la shield ethernet.

#include <SPI.h>
#include <String.h>
#include <Ethernet.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <stdlib.h>
#include <Adafruit_Fingerprint.h>
#include <SoftwareSerial.h>

uint8_t getFingerprintEnroll(int id);
int getFingerprintIDez();

SoftwareSerial mySerial(11, 12);
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);

LiquidCrystal_I2C lcd(0x27, 16, 2);
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 0, 2 };
EthernetServer server(80);


int led1 = 22;
int led2 = 23;
String readString = "";


void setup() { 
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  Ethernet.begin(mac, ip);
  server.begin();
  SPI.begin();
  Serial.begin(9600);
  finger.begin(57600);
  if (finger.verifyPassword()) {
    Serial.println("Sensor encontrado!");
  } else {
    Serial.println("El sensor no se ha encontrado :(");
    while (1);
  }


}

void loop() {
  
  getFingerprintIDez();

  
}
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; 
}

Eso código funciona perfectamente , puedo poner mi dedo y me dice si esta enrolado o no , mi problema es cuando intento agregarle lo siguiente al loop:

#include <SPI.h>
#include <String.h>
#include <Ethernet.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <stdlib.h>
#include <Adafruit_Fingerprint.h>
#include <SoftwareSerial.h>

uint8_t getFingerprintEnroll(int id);
int getFingerprintIDez();

SoftwareSerial mySerial(11, 12);
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);

LiquidCrystal_I2C lcd(0x27, 16, 2);
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 0, 2 };
EthernetServer server(80);


int led1 = 22;
int led2 = 23;
String readString = "";


void setup() { 
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  Ethernet.begin(mac, ip);
  server.begin();
  SPI.begin();
  Serial.begin(9600);
  finger.begin(57600);
  if (finger.verifyPassword()) {
    Serial.println("Sensor encontrado!");
  } else {
    Serial.println("El sensor no se ha encontrado :(");
    while (1);
  }


}

void loop() {
  
  getFingerprintIDez();

  EthernetClient client = server.available();
  if (client) {
    while (client.connected())
    {
      if (client.available())
      {
        char c = client.read();

        if (readString.length() < 40)
        {
          readString += (c);
        }

        if (c == '\n')
        {
          if (readString.indexOf("Registrar") >= 0)
          {
            //
          }

          if (readString.indexOf("Eliminar") >= 0)
          {
            //
          }
         
          delay(1);
          readString = "";
          client.stop();
        }
      }
    }
  }
}

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; 
}

El sensor empieza a leer despacio … enciende y apaga su luz cada 1 segundo, y si coloco un dedo lo reconoce y se queda pegado y si abro el monitor serial imprime a cada rato “Sensor encontrado” , como si volviese al setup.

La verdad no sé que puede ser. Busque en foros y no he encontrado nada.

Chicos , ya lo resolví , lo que hice fue crear una función que la llamé clienteEthernet(); y dentro de ella metí el algoritmo de cliente ethernet de esta forma

void clienteEthernet(){
    EthernetClient client = server.available();
  if (client) {
    while (client.connected())
    {
      if (client.available())
      {
        char c = client.read();

        if (readString.length() < 40)
        {
          readString += (c);
        }

        if (c == '\n')
        {
          if (readString.indexOf("Registrar") >= 0)
          {
           //
          }

          if (readString.indexOf("Eliminar") >= 0)
          {
           //
          }
         
          delay(1);
          readString = "";
          client.stop();
        }
      }
    }
  }
}

y esta la invoque dentro de la función de leer la huella de esta forma:

int getFingerprintIDez() {
   clienteEthernet();
  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.confidence; 
}

En el loop solo me quedo:

void loop() {
  
 getFingerprintIDez();
 delay(50); 
}

Ahora mi pregunta … por que no lo podía hacer de la otra forma ? por los return de la función leer huella , cierto ?