Solo detecta un software serial.

Buenas tardes, trato de hacer un sistema de riego que mida el caudal y posteriormente se comunique con el usuario por un sms y de igual forma el usuario pueda enviarle indicaciones, para esto uso dos arduinos, un arduino uno y uno nano, el problema es que el arduino uno, no envia ni recibe nada del puerto serial del otro arduino, aunque use la funcion listen(); pero si detecta la el modulo gsm l900. podrian decirme como solucionarlo o que estoy haciendo mal (ya probe la comunicacion entre los arduinos por aparte y si logro que funcione, pero no puedo implementarlo al programa final)

#include <SoftwareSerial.h>
SoftwareSerial SIM900(11, 12); // Configura el puerto serial para el SIM900. Para el Arduino MEGA utilizar pines 10 y 11
SoftwareSerial otroarduino(8, 9);
unsigned long time;


int respuesta;
char aux_str[50];
char incoming_char = 0; //Variable para guardar los caracteres que envía el SIM900
String mensaje = "";
char modo;
char nmensaje;

void setup()
{
  SIM900.begin(19200); //Configura velocidad del puerto serie para el SIM900
  Serial.begin(19200); //Configura velocidad del puerto serie del Arduino
  delay(1000);
  Serial.println("Iniciando...");
  power_on();
  iniciar();
 modo = 'a';
}

void loop (){
//---------------------------------------------------------------------------------------------------------
 
time = micros()/ 1000000;
Serial.println(time);  //prints time since program started

SIM900.listen();
while (SIM900.available() > 0)
  {
    incoming_char = SIM900.read(); //Guardamos el carácter del GPRS
    Serial.print(incoming_char); //Mostramos el carácter en el monitor serie
    mensaje = mensaje + incoming_char ; // Añadimos el carácter leído al mensaje
  }
  identifica_SMS();
  Serial.println();

otroarduino.listen();
if ((otroarduino.available()))
  {
    char inByte = otroarduino.read(); //Guardamos el carácter del GPRS
    Serial.print(inByte); //Mostramos el carácter en el monitor serie 
    nmensaje=inByte;  
  }
  otroarduino.print(modo);
   Serial.println();
   Serial.println(nmensaje);
   Serial.println(modo);
   Serial.println();

if (time>=20 && time<22){
   

}




  delay (10000);

}





void mensaje_sms()
{
 char  sms[40];
 char sms2[40]= "Bombas OPE energia solar \x1A \r\n";
 char sms3[40]= "Bombas OPE energia bateria \x1A \r\n";
 char sms4[40]= "Bombas OPE energia CFE \x1A \r\n";
 char sms5[40]= "Todas las bombas Activadas\x1A \r\n";

  if(nmensaje=='a')   {
    for(int i=0; i<=40; i++){
    sms[i]= sms2[i];
    }
   }
  if(nmensaje=='b')   {
    for(int i=0; i<=100; i++){
    sms[i]= sms3[i];
    }
   }
   if(nmensaje=='c')   {
    for(int i=0; i<=100; i++){
    sms[i]= sms4[i];
    }
   }
    if(nmensaje=='d')   {
    for(int i=0; i<=100; i++){
    sms[i]= sms5[i];
    }
   }


  if (enviarAT("AT+CREG?", "+CREG: 0,1", 1000) == 1) //comprueba la conexion a la red
  {
    Serial.println("Enviando SMS...");
    enviarAT("AT+CMGF=1\r", "OK", 1000); //Comando AT para mandar un SMS
    sprintf(aux_str, "AT+CMGS=\"+529613078229\"", strlen(sms)); //Numero al que vamos a enviar el mensaje
    //Texto del mensaje
    if (enviarAT(aux_str, ">", 10000) == 1)
    {
      enviarAT(sms, "OK", 10000);
    }
    Serial.println("SMS enviado");
  }
  else
  {
    reiniciar();
    iniciar();
  }
}


void llamar()
{
  if (enviarAT("AT+CREG?", "+CREG: 0,1", 1000) == 1) //Comprueba la conexion a la red
  {
    Serial.println("Realizando llamada...");
    enviarAT("ATD+529613078229;", "OK", 1000);
    delay(20000); // Espera 20 segundos mientras realiza la llamada
    enviarAT("ATH", "OK", 1000); // Cuelga la llamada
    Serial.println("Llamada finalizada");
  }
  else
  {
    reiniciar();
    iniciar();
  }
}


void identifica_SMS()
{
  int llamada = mensaje.indexOf("Autonomo");
  int msm = mensaje.indexOf("Prender");
  if (llamada >= 0)
  {
   modo='a';
   mensaje = "" ; //Bórralo para la próxima vez
  }
  if (msm >= 0)
  {
    modo='b';
    mensaje = "" ; //Bórralo para la próxima vez
  }
  }
  
//---Función para obtener los mensajes por AT--------

int enviarAT(char* ATcommand, char* resp_correcta, unsigned int tiempo)
{

  int x = 0;
  bool correcto = 0;
  char respuesta[100];
  unsigned long anterior;

  memset(respuesta, '\0', 100); // Inicializa el string
  delay(100);
  while ( SIM900.available() > 0) SIM900.read(); // Limpia el buffer de entrada
  SIM900.println(ATcommand); // Envia el comando AT
  x = 0;
  anterior = millis();
  // Espera una respuesta
  do {
    // si hay datos el buffer de entrada del UART lee y comprueba la respuesta
    if (SIM900.available() != 0)
    {
      //Comprueba que no haya desbordamiento en la capacidad del buffer
      if (x < 99) {
        respuesta[x] = SIM900.read();
        x++;
      }
      else Serial.println("Desbordamiento!");
      // Comprueba si la respuesta del modulo es la 1
      if (strstr(respuesta, resp_correcta) != NULL)
      {
        correcto = 1;
      }
    }
  }
  // Espera hasta tener una respuesta
  while ((correcto == 0) && ((millis() - anterior) < tiempo));
  Serial.println(respuesta);

  return correcto;
}

void power_on()
{
  int respuesta = 0;

  // Comprueba que el modulo SIM900 esta arrancado
  if (enviarAT("AT", "OK", 2000) == 0) //comprueba la conexion a la red
  {
    Serial.println("Encendiendo el GPRS...");

    pinMode(9, OUTPUT);
    digitalWrite(9, HIGH);
    delay(1000);
    digitalWrite(9, LOW);
    delay(1000);

    // Espera la respuesta del modulo SIM900
    while (respuesta == 0) {
      // Envia un comando AT cada 2 segundos y espera la respuesta
      respuesta = enviarAT("AT", "OK", 2000);
      SIM900.println(respuesta);
    }
  }
}

void power_off()
{
  digitalWrite(9, HIGH);
  delay(1000);
  digitalWrite(9, LOW);
  delay(1000);
}

void reiniciar()
{
  Serial.println("Reiniciando...");
  power_off();
  delay (5000);
  power_on();
}

void iniciar()
{
  enviarAT("AT+CPIN=\"1111\"", "OK", 1000);
  Serial.println("Conectando a la red...");
  delay (5000);

  //espera hasta estar conectado a la red movil
  while ( enviarAT("AT+CREG?", "+CREG: 0,1", 1000) == 0 )
  {
  }
  Serial.println("Conectado a la red.");
  enviarAT("AT+CLIP=1\r", "OK", 1000); // Activamos la identificacion de llamadas
  enviarAT("AT+CMGF=1\r", "OK", 1000); //Configura el modo texto para enviar o recibir mensajes
  enviarAT("AT+CNMI=2,2,0,0,0\r", "OK", 1000); //Configuramos el modulo para que nos muestre los SMS recibidos por comunicacion serie
  Serial.println("Preparado.");
}]

Gracias por su tiempo, (el codigo del arduino nano es muy simple y solo envia un caracter de tipo char)

  delay (10000);

Pones códigos de dos arduinos comunicandose mas una SIM900 y le insertas delay de 10 segundos? Dime como esperas que los arduinos se comuniquen?

Debes olvidar los delay y usar millis y no interrumpir los procesos de comunicación.

SoftwareSerial tiene ejemplos de dos puertos virtuales comunicandose. Pruebalo entre el UNO y el NANO mas el SIM900 en modo básico.
Si eso funciona, verás que tu código esta mal.

Ve a documentación, indice de temas tutoriales y lee sobre el uso de millis() y máquina de estados (si te hace falta).