Recepción de SMS mediante GSM y control de LED mediante Arduino

¿Alguien ha encontrado una solución al problema mencionado anteriormente?

Estamos utilizando Arduino Duemilanove y el módulo SIM 900 GSM ( http://robokits.co.in/shop/index.php?main_page=product_info&products_id=303 )

Hemos intentado trabajar en el problema similar de las luces LED del puerto 9-12 cuando enviamos un sms #aibicidi, donde i = 0 o 1, 0 = apagado, 1 = encendido. P.ej. #a1b1c1d1 encenderá todos los Led.

Cuando cargamos el código y lo ejecutamos a través del monitor en serie e ingresamos #a1b1c1d1 en el monitor en serie, podemos ver que todos los LED se iluminan. Pero si enviamos el sms con contenido "#a1b1c1d1", no vemos ninguna función de los leds.

Sería genial si alguien puede dar alguna orientación sobre el mismo.

 char inchar; //Will hold the incoming character from the Serial Port.


 int led1 = 9;
 int led2 = 10;
 int led3 = 11;
 int led4 = 12;

 void setup()
 {
 // prepare the digital output pins
 pinMode(led1, OUTPUT);
 pinMode(led2, OUTPUT);
 pinMode(led3, OUTPUT);
 pinMode(led4, OUTPUT);
 digitalWrite(led1, LOW);
 digitalWrite(led2, LOW);
 digitalWrite(led3, LOW);
 digitalWrite(led4, LOW);
 //Initialize GSM module serial port for communication.


 Serial.begin(9600);
 delay(3000); // give time for GSM module to register on network etc.
 Serial.println("AT+CMGF=1"); // set SMS mode to text
 delay(200);
 Serial.println("AT+CNMI=3,3,0,0"); // set module to send SMS data to serial out upon receipt 
 delay(200);
 }

 void loop() 
 {
 //If #a1b1c1d1 comes as sms, all led's should light up.
 if(Serial.available() >0)
 {
 inchar=Serial.read(); 
 if (inchar=='#')
   {
   delay(10);
   inchar=Serial.read(); 

 //first led
   if (inchar=='a')
     {
   delay(10);
   inchar=Serial.read();

 if (inchar=='0')
   {
   digitalWrite(led1, LOW);
   } 
 else if (inchar=='1')
   {
   digitalWrite(led1, HIGH);
   }
 delay(10);


 //Second led
 inchar=Serial.read(); 

 if (inchar=='b')
   {
   inchar=Serial.read();
 if (inchar=='0')
 {
 digitalWrite(led2, LOW);
 } 

 else if (inchar=='1')
 {
 digitalWrite(led2, HIGH);
 }
 delay(10);

 // Third led
 inchar=Serial.read(); 
 if (inchar=='c')
 {
 inchar=Serial.read();
 if (inchar=='0')
 {
 digitalWrite(led3, LOW);
 } 
 else if (inchar=='1')
 {
 digitalWrite(led3, HIGH);
 }
 delay(10);

 //Fourth led

 inchar=Serial.read(); 
 if (inchar=='d')
 {
 delay(10);
 inchar=Serial.read();
 if (inchar=='0')
 {
 digitalWrite(led4, LOW);
 } 
 else if (inchar=='1')
 {
 digitalWrite(led4, HIGH);
 }
 delay(10);
 }
 }
 Serial.println("AT+CMGD=1,4"); // delete all SMS
 }
 }
 }
 }
 }
Pude resolver el problema de estado anterior. Accede a este enlace, a la última publicación: edaboard.com/thread284929.html
Es posible que desee anotar su experiencia como respuesta, elaborar un poco el contenido del enlace proporcionado y luego aceptar su propia respuesta. No es una respuesta de solo enlace, por supuesto, ya que agregan poco valor a este sitio y pierden sentido cuando el objetivo del enlace cambia de ubicación o el sitio muere en algún momento.

Respuestas (2)

su código es bueno para la terminal serial, pero no para el módem GSM. Siempre toma el comando en forma de AT use AT+CMGR=1 para leer el mensaje.... envíe este comando al módem y vea la respuesta....

Esto recuperaría 1 mensaje, pero sin borrarlo, el mismo mensaje permanecería en la cola, ahogando la aplicación.

Realice la modificación AT+CNMI=2,2,0,0,0en lugar AT+CNMI=3,3,0,0de nuestro código anterior. Entonces el relé funcionará.

¿A qué diablos se refiere "nuestro código anterior"?
@Dave Tweed Es una referencia a una respuesta en un hilo en el tablero vinculado en el comentario publicado por OP en su propia publicación. Perfectamente simple viejo cap. JAJAJA.