Prueba fallida

Hola ante todo agradezco la atencion de la gente del foro.
Estoy probando el siguiente codigo y no consigo hacerlo funcionar.
Tengo un arduino uno y un modulo gsm sim900.
El modulo sim900 lo probe por separado con el conversor ftdi y responde a los comandos AT.
Dejo copia del codigo y en lo que puedan ayudarme desde ya se los agradezco.

/*
 * Complete Project Details https://randomnerdtutorials.com
 */

// Include Software Serial library to communicate with GSM
#include <SoftwareSerial.h>

// Configure software serial port
SoftwareSerial SIM900(7, 8);

// Variable to store text message
String textMessage;

// Create a variable to store Lamp state
String lampState = "HIGH";

// Relay connected to pin 12
const int relay = 12;

void setup() {
  // Automatically turn on the shield
  digitalWrite(9, HIGH);
  delay(1000);
  digitalWrite(9, LOW);
  delay(5000);
  
  // Set relay as OUTPUT
  pinMode(relay, OUTPUT);

  // By default the relay is off
  digitalWrite(relay, HIGH);
  
  // Initializing serial commmunication
  Serial.begin(19200); 
  SIM900.begin(19200);

  // Give time to your GSM shield log on to network
  delay(20000);
  Serial.print("SIM900 ready...");

  // AT command to set SIM900 to SMS mode
  SIM900.print("AT+CMGF=1\r"); 
  delay(100);
  // Set module to send SMS data to serial out upon receipt 
  SIM900.print("AT+CNMI=2,2,0,0,0\r");
  delay(100);
}

void loop(){
  if(SIM900.available()>0){
    textMessage = SIM900.readString();
    Serial.print(textMessage);    
    delay(10);
  } 
  if(textMessage.indexOf("ON")>=0){
    // Turn on relay and save current state
    digitalWrite(relay, LOW);
    lampState = "on";
    Serial.println("Relay set to ON");  
    textMessage = "";   
  }
  if(textMessage.indexOf("OFF")>=0){
    // Turn off relay and save current state
    digitalWrite(relay, HIGH);
    lampState = "off"; 
    Serial.println("Relay set to OFF");
    textMessage = ""; 
  }
  if(textMessage.indexOf("STATE")>=0){
    String message = "Lamp is " + lampState;
    sendSMS(message);
    Serial.println("Lamp state resquest");
    textMessage = "";
  }
}  

// Function that sends SMS
void sendSMS(String message){
  // AT command to set SIM900 to SMS mode
  SIM900.print("AT+CMGF=1\r"); 
  delay(100);

  // REPLACE THE X's WITH THE RECIPIENT'S MOBILE NUMBER
  // USE INTERNATIONAL FORMAT CODE FOR MOBILE NUMBERS
  SIM900.println("AT + CMGS = \"XXXXXXXXXX\""); 
  delay(100);
  // Send the SMS
  SIM900.println(message); 
  delay(100);

  // End AT command with a ^Z, ASCII code 26
  SIM900.println((char)26); 
  delay(100);
  SIM900.println();
  // Give module time to send SMS
  delay(5000);  
}

Y porque una pregunta de software la posteas en hardware?
Movido a dicha sección!!

Y concretamente... ¿que es lo que te hace mal/bien/raro/falla...etc etc?

Saludos

Gracias por el interes.
Paso a comentar, la prueba era fallida porque no funcionaba directamente, ahora lo que hice fue cambiar en el softserial.h la configuracion de las patas 7 ,8 del arduino la pase a la 0,1 del mismo que las marca como rx tx cruzando las entradas rx del arduino con tx del modulo sim900 y tx del arduino al rx del modulo sim900.
Esto siguiendo un consejo del moderador a otra persona.
Ahi arranco el sistema recibe el sms con la orden on del mensaje pero no reconoce la orden off y la de state osea esta en marcha pero el funcionamiento no es el esperado.
Pego el texto del monitor serie para que vean lo que aparece al recibir sms con orden on

SIM900 ready...
+CMT: "+541160000000","","19/04/07,14:20:17-12"
ON
SIM900 rRelay set to ON

+CMT: "+541160000000","","19/04/07,14:20:17-12"
ON
SIM900 rRelay set to ON
Relay set to ON

+CMT: "+541160000000","","19/04/07,14:20:17-12"
ON
SIM900 rRelay set to ON
Relay set to ON
Relay set to ON

+CMT: "+541160000000","","19/04/07,14:20:17-12"
ON
SIM900 rRelay set to ON
Relay set to ON
Relay set to ON
Relay set to ON

+CMT: "+541160000000","","19/04/07,14:20:17-12"
ON
SIM900 rRelay set to ON
Relay set to ON
Relay set to ON
Relay set to ON
Relay set to ON

+CMT: "+541160000000","","19/04/07,14:20:17-12"
ON
SIM900 rRelay set to ON
Relay set to ON
Relay set to ON
Relay set to ON
Relay set to ON
Relay set to ON

Ahora con sms orden state

SIM900 ready...
+CMT: "+541160000000","","19/04/07,05:31:34-12"
STATE
SIM90Lamp state resquest

+CMT: "+541160000000","","19/04/07,05:31:34-12"
STATE
ERROR

Esto lo hace constantemente en el monitor serie.
Otro sintoma raro el sistema se apaga cuando cierro y abro el monitor serie.
Hasta aca masomenos lo que esta pasando cualquieir consejo es bien recibido saludos gente.

eso es porque deberían estar los cables 7 y 8 al revés. Te aconsejo que los pongas allí y dejes los 0 y 1 para el serial

Y si, al arrancar el monitor serie y/o apagarlo es normal que el arduino se resetee

Una vez tengas funcionando el 7 y 8 y los pins del SIM900 que estén configurados para esa conexion, si funciona no cámbialos. En teoría es del 7 del sim al 7 del arduino y del 8 del sim al 8 del arduino

saludos

Hola disculpa mi ignorancia entonces hago la conexion del sim y el arduino por las patas 7,8 de ambos no de los puertos rx tx del sim a las patas 7,8 del arduino como era el proyecto original ?
Otra cosa lo del monitor serie que puede ser que da ese mensaje continuo del status es como un loop

REDESBMC:
Otra cosa lo del monitor serie que puede ser que da ese mensaje continuo del status es como un loop

no entiendo lo que preguntas. Es normal que al desconectar/activar el monitor el arduino se resetee

REDESBMC:
Hola disculpa mi ignorancia entonces hago la conexion del sim y el arduino por las patas 7,8 de ambos no de los puertos rx tx del sim a las patas 7,8 del arduino como era el proyecto original ?


Ten en cuenta que la alimentación esta mal conectada en esta imagen y que, a ser posible, uses una alimentación no conectada al arduino

Gente, no entiendo porque se ponen a trabajar con cosas complicadas sin dominar lo simple

Un sim900/800 se comunica por serial.
Un cable TX debe ir a otro RX y vice verza.

Ademas de compartir GND entre ambos.

Luego ese modulo consume mucha corriente al transmitiri asi que nada de alimentarlo con algo que no sea de 2A minimo.

En esas condiciones puede comunicarse correctamente.
Una cosa mas.

La librería tiene dos o mas opciones.
Si estas con UNO o si estas con MEGA

SI estas con UNO que es lo que viene por defecto estar descomentado el uso del UNO. Eso se ve en un archivo con extensión .h.
Y luego que conexion Serial estas usando.
Por defecto viene el uso de 7,8 via SoftwareSerial.
Para usar 0,1 hay que cambiar a HardwareSerial.
Asi que no es cuestion de cambiar por cambiar.

Finalmente, todo esto funciona si algo que normalmente es pin9 hace el POWERKEY sino hay que hacerlo manual.
Aun teniendo todo lo anterior si no haces la secuencia de arranque el SIM no arranca.

Espero se comprenda.

Fuente de 2A.
Verificar que Arduino usas
Verificar tipo de conexion Serie.
PowerKey.

Respuesta surbyte

Lo de la alimentacion lo entendi eso esta perfecto.
Lo de encendido manual o automatico lo entendi.
La alimentacion esta en los parametros que decis no esta el problema ahi el sim900 envia el mensaje sin problemas llega al arduino uno activa el relay despues de eso queda patinando en que esta en ON es lo que veo en el monitor serie es lo que estoy tratando de explicar.
En cuanto a la conexion serie probe de todas formas desde el pin 7,8 y no tenia respuesta recien cuando conecte pin 0,1 arduino y rx tx sim900 recien recibio el mensaje y se activo el relay.

Dos cosas que no me quedan claras, que me corrijan si me equivoco:

si estas usando un arduino uno y estas mandando informacion a la consola no puedes usar los pines 0 y 1 ya que esos son los que usa "Serial".

Y si estas usando un mega, mira que la serigrafia de algunos clones chinos viene mal, en el serial1 TX y RX estan al reves.

SAlu2

Porque tu librería estaria por defecto asi, para usar HardwareSerial.
No dices que librería usas.

Coloca el enlace de tu librería (usa etiquetas) no sabes cómo, lee las normas.

mira esto. supongo que ahí tienes el fallo

Saludos