Activar rele con llamada

Hola a todos, quería consultarles ya que estoy trabajando (renegando :pensive:) con mi código y no logro ller el ring cuando llamo a la placa, este es mi lectura de los datos:

void loop()
{
updateSerial();
}

void updateSerial()
{
delay(500);
while (Serial.available())
{
SIM900.write(Serial.read());//Forward what Serial received to Software Serial Port
}
while(SIM900.available())
{
Serial.write(SIM900.read());//Forward what Software Serial received to Serial Port
}
}

cuando llamo en el monitor serie veoe l ring, pero no se como guardarlo o identificarlo en variable para poder utilizarlo y abrir el rele..

el mismo código lo tengo con esta otra forma de leer los datos:

void loop()
{
  while (SIM900.available())
  {
    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
  }
}

pero el primer es mas exacto, no tiene caracteres raros ni demoras, anda muy bien, pero al no poder extraer el ring cuando llamo no lo puedo utilizar para abrir el rele que es parte de lo que quiero lograr..
Espero haberme explicado bien, y como siempre agradezco de antemano a todos, saluditos..
Any.

Los códigos hacen cosas diferentes.
El primero replica en el serial lo que recibe del SIM, y viceversa.
El segundo lee lo que recibe del SIM y lo guarda en una variable.

El 2do. es con el que tienes que trabajar.

Saludos

Hola gatul gracias por tu respuesta, como podria mejorarlo al codigo? hay alguna otra manera mas segura/prolija para no decir exacta, de leer lo que me envia la sim?
y que diferencia habria si uso if en vez de while y

(SIM900.available()>0) 
en vez de este:
(SIM900.available())
```gracias nuevamente...

Esta es la manera, que quiere decir si hay caracteres recibidos entonces hago lo que sigue a continuación.

Exactamente como te dice @Surbyte es la forma de hacerlo.

Busca algún tutorial para leer datos por serial y simplemente cambia Serial por SIM900 porque sus funciones son compatibles y es muy fácil adaptar uno para el otro.

Saludos

Hola Surbyte, gracias a los 2..me queda como duda, si me pueden responder para seguir aprendiendo, porque de la manera que lo tenia ( "(SIM900.available())" ), que igual ya lo corregí, también funcionaba?
de verdad pregunto porque es la única manera de poder aprender conductas de programación correctas, ahora que me dijeron obvio que lo voy a poner de la forma correcta, pero me pasa mucho ver que algo que hice funcionar, aunque no sepa bien como o porque, dejarlo así y continuar, y eso tal vez haga que arrastre problemas en los códigos o que todo en algún momento empiece a fallar y después no tenes idea de por donde viene el lío..
Asi que agradezco el tiempo que se toman para contestar y desde ya muchas gracias a los 2 nuevamente, saludos...
Any.

Porque si available() devuelve cualquier valor distinto de 0, o sea hay caracteres para leer, se interpreta como verdadero (true) y el lazo while() se ejecuta.
En teoría es lo mismo usarlo así o como te sugerimos ( comparándolo con 0) pero si mal no recuerdo, hay una situación en la que puede devolver -1 y resulta que como -1 es distinto de 0 se toma también como verdadero, y ¡Zaz! Problemas en puerta.

Lo más seguro es usar

Serial.available() > 0

O en tu caso

SIM900.available() > 0

Y te evitas problemas futuros

Perfecto gatul muchisimas gracias (y a Surbyte tmb)...resuelta la consulta, saludos
Any.

¡Por nada!

Saludos

Gracias, tmb pero tu código debe seguir, asi que, analiza los siguientes pasos y haz tus consultas.
Recuerda que las librerías tienen ejemplos, y hay un ejemplo en la librería GSM que lee mensajes SMS. No reinventes la rueda, ya esta hecho.
Mira el ejemplo, busca algun tutorial, y luego nos haces tus consultas.

Perdón cierro la consulta ya que gracias gatul y Surbayte resolví el problema, saludos

Any.