Problemas con dos SoftwareSerial simultaneos

Hola gente de nuevo por acá con un problema....
Les cuento.... estoy intentando hacer una alarma para mi auto.
El objetivo es eliminar las cerraduras y colocar dos lectores de huella uno en cada puerta (GROW R503)
para poder abrir y cerrar el auto de las dos puertas, también al cerrar las puertas el Arduino tiene que que monitorear si alguna puerta se abre, hacer sonar la sirena y hacer que parpadeen las balizas. Además cuando tranca o destranca las puertas la sirena suena por un momento y las balizas también se encienden, lo que seria el funcionamiento normal de una alarma.
El programa funciona bien, el problema es que no puedo hacer que los dos lectores de huella funcionen al mismo tiempo. La placa es un Arduino uno y tengo un modulo de 4 relays conectado.... dejo el programa aquí...

// 4 tranca
// 5 destranca
// 6 sirena
// 7 senaleros
// i=true si tranca y false si destranca
// d=enclavamiento de sensor de puerta
#include <Adafruit_Fingerprint.h>
SoftwareSerial mySerial(2, 3);
SoftwareSerial mySeri(9, 10);
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);
Adafruit_Fingerprint finger2 = Adafruit_Fingerprint(&mySeri);
unsigned long t;
int ER;
bool i;
bool d;
bool ac;
void tranca(){digitalWrite(4,LOW);delay(700);digitalWrite(4,HIGH);i=true;digitalWrite(6,LOW);delay(500);digitalWrite(6,HIGH);}
void destranca(){digitalWrite(5,LOW);delay(700);digitalWrite(5,HIGH);i=false;d=false;digitalWrite(7,HIGH);digitalWrite(6,LOW);delay(500);digitalWrite(6,HIGH);}
void cambio(){ if (ac == false){ac=true;tranca();}
              else {destranca();ac=false;}}
void setup() {
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
digitalWrite(6,HIGH);
i=false;
d=false;
ac=false;
t = millis();
ER = HIGH;
digitalWrite(7,ER); 
finger.begin(57600);
delay(5);
finger2.begin(57600); 
delay(5);
}

void loop() {
if(i==true & digitalRead(8)== LOW){d=true;}
if(d==true && i==true) {digitalWrite(6,LOW);parpadeo();}
getFingerprintIDez();           
  delay(50);} 
int getFingerprintIDez() {
  uint8_t p = finger2.getImage();
  if (p != FINGERPRINT_OK)  return -1;

cambio();
return finger2.fingerID; 
}





bool parpadeo(){
  if ( millis() - t >= 300 ) {
    if ( ER==HIGH )
     ER=LOW;
   else
     ER=HIGH;
     digitalWrite(7,ER);
   t = millis();
     
 }}

Espero haberme explicado bien.
Gracias por su tiempo gente!

Y porque no usas un MEGA que tiene 4 puertos Serie Hardware?
SoftwareSerial puede usarse de a 1. Para ellos debes cambiar el objeto que va a escuchar con el comando Objeto.listen()

Además 57600 es demasiado rápido para dos SofwareSerial. Yo lo bajaría pero comienza por acá.

#include <SoftwareSerial.h>

// software serial : TX = digital pin 10, RX = digital pin 11
SoftwareSerial portOne(10, 11);

// software serial : TX = digital pin 8, RX = digital pin 9
SoftwareSerial portTwo(8, 9);

void setup()
{
  // Start the hardware serial port
  Serial.begin(9600);

  // Start both software serial ports
  portOne.begin(9600);
  portTwo.begin(9600);

}

void loop()
{
  portOne.listen();

  if (portOne.isListening()) {
   Serial.println("Port One is listening!");
}else{
   Serial.println("Port One is not listening!");
}

  if (portTwo.isListening()) {
   Serial.println("Port Two is listening!");
}else{
   Serial.println("Port Two is not listening!");
}

}

Hola gracias por tu respuesta!
No uso el mega porque es caro je
Lo de 57600 lo deje así xq es lo que tenia en la librería (voy a probar bajarlo)
Y el ejemplo que me diste lo vi en internet.... intente usarlo pero no lo supe acoplar a mi programa....
mañana voy meterle cabeza otra ves a ver si me sale bien je. gracias por tu tiempo compa!

Al mismo tiempo no funcionará nada en Arduino.
Intenta implementar lo mismo del ejemplo usando los objetos mySerial y mySeri y luego le cedes control a los objetos finger1 y finger2.

  mySerial .listen();
  if (mySerial .isListening()) {
      uint8_t p = finger2.getImage();
      if (p != FINGERPRINT_OK)  
	 return -1;
  }

prueba a ver si puede ser.
De todos modos no entiendo tu código ya que esta rutina no existe.

        getFingerprintIDez();        // no existe
	delay(50);}
	int getFingerprintIDez() {

Si la verdad yo tampoco entiendo el xq de esa rutina... Es basicamente el ejemplo fingerprint que viene con la libreria del sensor. Solo que lo reduje a nada xq no iba a usar todo el resto del ejemplo... y le agregue mi codigo.
Pero el hecho es que si borro algo de esa rutina que "no existe" deja de funcionar todo.
Otra cosa que intente fue usar un puerto softwareserial (pines 2 y 3...mySerial) y el puerto fisico del arduino, para ver si asi conseguia la simultneidad de los puertos, pero no funciono aunque usara solo un sensor en el puerto fisico... Es como si el puerto fisico no fuera compatible con el sensor de huella.

int getFingerprintIDez();

vi que lo usan pero inmediatamente luego de definir el objeto finger, no como lo usas en tu código.
Esto surge de mirar los ejemplos de la librería citada.

Yo tuve un problema similar, con un nano, tenia varios dispositivos seriales que tenia que leer al mismo tiempo, pero no fue posible. En la documentación de la libreria te aclaran que solo puede usarse uno por vez. Lo solucione habilitando uno por uno los puertos seriales. Inicializas todos los puertos seriales y cuando en alguno aparece un dato, deshabilitas los demás con el método " .end() ", lees ese puerto serial y al terminar la lectura vuelves a habilitarlos con " .begin()" y haces ".flush()" a los otros puertos
. Esto te impide leer al mismo tiempo los puertos y si se produce mas de un evento sobre los puertos seriales se pierde la información.

saludos

Hola gracias por tu respuesta, voy a probarlo también. Estuve medio complicado de tiempo y no eh podido tocar el proyecto. Ni bien lo toque voy a probar todas las recomendaciones y les cuento como me fue! Otra ves gracias a todos!

Hola disculpen la ausencia!
Les cuento que no lo pude solucionar y opte por utilizar 2 placas de arduino. Un lector conectado a cada placa y todo el programa en una... En la segunda solo utilice una salida que es leida en la otra para ejecutar el programa.
Asi me funciono impecable... Con la macana de que utilizo dos placas para el proyecto.

Se usan arduinos para tantas cosas, no te sientas mal por usar dos.
Tu problema tiene el inconveniente de querer sacar mas de lo que se puede a un simple Arduino.
Tal vez con un MEGA o DUE que tienen 4 puertos serie por hardware no hubieras tenido tantos problemas.

Cuando necesito 2 puertos serie, no pienso jamás en un doble SoftwareSerial siempre busco opciones que tengan Seriales x hardware.

Si la verdad que te doy toda la razón!

Cuando tu decidas que el hilo esta terminado, le das solucionado al tema inicial.

He visto códigos con GPS y BT donde se usan 2 SoftwareSerial pero jamas se esta pendiente de perder datos de alguno. Eso es algo a tener en cuenta.
No veo el modo de estar atento a dos buffer de datos y que un acceso simultáneo que tenga una variación de solo 1 mseg solo para dar un ejemplo sea determinante para que SoftwareSerial no funcione.

Mi consulta es... : probaste los dos FingerPrint de tal modo que se perdía el acceso de uno de ellos? Subiste los baudios en ambos para minimizar el tiempo de lectura?
Son cosas que no sugerí entonces y que ahora se me ocurren.
Por último... considera que una vez que tengas resuelto tu código puedes usar 0 y 1 o sea los RX y TX originales para un FingerPrint y ya te quedaría solo 1 con SoftwareSerial.
Solo en la etapa de desarrollo usarías los dos y entonces todo lo que antes era crítico luego tendrá mas margen porque al disponer de un puerto Hardware las cosas mejoran para tu proyecto.