# Decodificacion de comandos recibidos de un sim900 con arduino



## EmaBaer (Feb 11, 2014)

Hola compañeros. Estoy llevando a cabo un proyecto en donde tengo que recibir un msj con un IComSat v1.1 y de acuerdo a la palabra que se envio el msj, responder ciertos datos que leo con el arduino. (Ej: temperatura)
vengo renegando hace unas semanas tratando de recibir los comandos que el SIM900 me responde.
Con el monitor serial del compilador arduino no puedo ya que cuando alimento el arduino con una fuente para darle la potencia necesaria al SIM900, el monitor ya no reconoce el arduino.
Por eso, eh tratado de recibirlo con un conversor USB-UART (prolific PL2303) y usando el software AccesPort, tambien probe escribirlos en un display lcd. Pero lo que logoro leer son cantidad de caracteres sin sentido.
Para sacarme la duda si estaba conectando algo mal, o tengo un error en el sketch, probe conectar de la misma forma un modulo bluetooth que tembien trabaja con comandos AT y con este si puedo leer las respuestas.
mi pregunta es ¿que puedo estar haciendo mal?
No me vendria nada mal si alguien me puede orientar para desglosar la respuesta para trabajar solamente con el texto en el caso de la recepcion de un msj.
Desde ya muchas gracias por su ayuda y paciencia. ...


----------



## Moyano Jonathan (Feb 12, 2014)

> Hola compañeros. Estoy llevando a cabo un proyecto en donde tengo que recibir un msj con un IComSat v1.1 y de acuerdo a la palabra que se envio el msj, responder ciertos datos que leo con el arduino.



Todos tienen problemas con el ICOMSAT, vas a tener que hacer algunas pruebas previas:

*1º* - Sacar el ATMEGA328P del arduino y conectarle el shield del ICOMSAT para poder comunicarte directamente con el SIM900 a través del FT232.
*2º *- Alimentar al ICOMSAT con una fuente que te pueda entregar de manera confiable 12v 2A.
*3º* - Encender el módulo ICOMSAT y determinar si el mismo se enlaza a la red, te vas a dar cuenta por que el led NETSTAT empieza a parpadear cada 1.5 segundos aprox.
*4º *- Probar el comando AT, determinar si recibis el OK en el terminal de arduino.
*5º - Hasta acá ya tenés lo básico para hacerlo funcionar.*

Te recomiendo que saques fotos a lo que estás haciendo y seas más detallado para mostrar tus problemas/consultas. De esa manera nosotros vamos a poder responder de manera adecuada y eficiente para que saques tu proyecto adelante.

Saludos !


----------



## EmaBaer (Feb 12, 2014)

Buenas noticias. Logre recibir de manera correcta las respuestas de sim900.  El problema era que debia configurar el sim900 para que el control de flujo sea por software que se hace con el comando "AT+IFC=1,1" y "AT&W" para guardar esta configuracion de manera permanente.

Por si alguno choca con esto sugiero que vean el siguiente blog, el cual me sirvio de mucha ayuda ya que esta muy bien explicado y detallado.

http://fuenteabierta.teubi.co/2013/10/arduino-y-el-gsm-propox-mmsmartgsm.html#more

Mi mayor problema, en el cual sabia que iba a caer, es en "desglosar" la respuesta que me da el sim900 cuando leo un msj.

En otras palabras... a mi me llega esto:

AT+CMGR=12
+CMGR: "REC UNREAD","+549XXXXXXXXXX","","14/02/12,23:52:03-12"
<texto>

De esto, tengo que analizar el texto y de acuerdo a la palabra que sea, responder con un determinado dato, al mismo numero telefonico. El problema esta en como extraer de esa respuesta el numero para luego contestar y el texto para analizar

Si alguien me d una mano con esto seria genial.

De cualquier forma, voy a seguir probando y si logro hacerlo publicare el sketch y el circuito para compartirlo.


----------



## EmaBaer (Feb 20, 2014)

Buenas.. Estoy aun en la lucha para leer un msj. ya tengo casi todo terminado. Pero... el problema que me surgio ahora es que al recibir una cadena de caracteres tan larga cuando leo la respuesta del msj (mayor a 64 bytes) se me desborda el buffer del puerto serial del arduino. y no se como evitar esto o como agrandar el tamaño del buffer.
Si alguien tiene una idea seria fenomenal.
Saludos


----------



## maci (May 8, 2014)

hola EmaBaer, estoy trabajando con un arduino uno, y una placa elecfreaks (sim900), yo uso el monitor serial de arduino para introducir los comandos AT, mi problema es que antes podia ver los comandos que introducia, y las respuestas del sim900, y ahora no puedo ver nada, la verdad no se que hacer, intente configurarlo de fabrica, pero no pasa nada. Intente enviar mensajes cargando un programa en arduino (antes funcionaba) y no me funciona. en sintesis, ahora no me funciona nada.
ya habia logrado recibir mensajes y leerlos en el monitor serial de arduino, pero ahora ni sikiera eso puedo.  podrian ayudarme? gracias.


----------



## EmaBaer (May 8, 2014)

Hola maci.

Antes que nada verifica las conexiones. Considera que necesitas las lineas de alimentacon de al menos 2A, y las lineas de comunicacion de TX a RX y RX a TX.

Si reestableciste el modulo quisas la taza de transferencia ya no sea la misma que usabas (creo que por defecto es 9600 bps) si no anda probando hasta que te logres comunicar.

Tambien te suguiero que pruebes otra terminal como el TeraTerm. a este  vas a tener que configurarle la taza de transferencia, que cuando transmita envie CR+LF y tilda local hecho en "terminal" dentro de la pestaña "setup".

Si el problema es el control de flujo vas a necesitar las lineas RTS y CTS que no se si las incorpora la placa que usas.

Espero ayudarte.

Saludos.


----------



## Moyano Jonathan (May 8, 2014)

> mi problema es que antes podia ver los comandos que introducia, y las respuestas del sim900, y ahora no puedo ver nada



Pero tenés que ser más específico. El módulo te enciende, el led status se mantiene prendido ? El led de netstat parpadea cada 3 segundos ? podés encender el módulo ? Qué fuente estás usando ? 
Si nos dás más información quizás podamos resolver tu problema.

Saludos !


----------



## oscar55 (Ago 2, 2017)

Hola a todos 

Tengo un problema al intentar detectar si he leido o no un determinado String por el puerto serie del arduino desde el sim900 


```
void identificarFuncion(boolean llamando){
     while (SIM900.available()) {
        char c = SIM900.read();
        palabra=palabra+c; 
        Serial.println(palabra);
        //palabra = String(palabra);
        //String palabra2="RING";
        if (palabra.equals("RING\r")) {
          Serial.println("ring detectado");
          if(llamando==true){
               detenerLlamada();     
          }else{
                pararBomba();
          }
          
        }
        
      }
      palabra="";    
  }
```

no consigo que entre en el bucle if  aunque la salida del puerto serie es la misma que lo que comparo en el bucle

gracias

adjunto captura de la salida del puerto serie


----------

