bclose

CONTROLAR ARDUINO MEDIANTE LLAMADAS Y SMS

Encendiendo y apagando un LED con nuestro móvil

Objetivos

 

 

    • Encender y apagar un LED mediante llamadas y SMS.
    • Crear una agenda con números autorizados para las llamadas.
    • Reconocer y utilizar textos de los SMS para realizar diferentes acciones.
 

Material requerido.

CONTROLAR ARDUINO CON NUESTRO MÓVIL

 

Con lo que hemos aprendido hasta ahora seguro que a muchos de vosotros (yo incluido) se os ha ocurrido que podríamos montar un sistema que, por ejemplo, encienda la calefacción de casa un ratillo antes de que lleguemos haciéndole una llamada con nuestro móvil, y así estemos bien a gustito en casa según lleguemos.

Pues en esta sesión vamos a ir acercándonos a eso. Primero utilizando una llamada para encender y apagar un LED, y después para hacer lo propio en función del SMS que le enviemos.

movil llama arduino

 

UTILIZAR UNA AGENDA PARA FILTRAR LAS LLAMADAS

 

Primero vamos a centrarnos en las llamadas. El concepto del programa será guardar en una variable el texto que recibamos del puerto serie del GPRS y si es una llamada, encender o apagar un LED alternativamente. Pero claro, no queremos que nadie que no seamos nosotros (u otra persona autorizada por nosotros) se equivoque al llamar de número y ande encendiendo cosas en nuestra casa, así que crearemos una agenda con los números que tienen nuestro beneplácito.

Además tendremos que crear una variable mensaje tipo String, donde iremos guardando los caracteres que nos vayan llegando del GPRS, con el fin de poder luego trabajar con ellos.

 #include <SoftwareSerial.h>
   SoftwareSerial SIM900(7, 8); // 10 y 11 para el Arduino Mega. Configura el puerto serial para el SIM900

   char incoming_char = 0; //Variable que guarda los caracteres que envia el SIM900
   String mensaje = "";
   int LED = 13 ;
   bool estado = false ;  //Variable para guardar el estado del LED
   String agenda[] = {"XXXXXXXXX" , "XXXXXXXXX"};  //Array con los numeros autorizados
   int numtotal = 2;  //Cantidad de numeros de telefono autorizados

Toda la parte de los programas que sirve para recibir las llamadas y los SMS correctamente va a ser el mismo que en la sesión anterior, sólo que esta vez hemos metido toda la parte que se encarga de poner en marcha el módulo GPRS en una función a la que llamaremos inicializaSIM900, y que lanzaremos en el setup.

 void inicializaSIM900()
   {
      //digitalWrite(9, HIGH); // Descomentar para activar la alimentación de la tarjeta por Software
      //delay(1000); 
      //digitalWrite(9, LOW);
      delay (5000);
      SIM900.begin(19200); //Configura velocidad del puerto serie para el SIM900
      Serial.begin(19200); //Configura velocidad del puerto serie del Arduino
      Serial.println("OK");
      delay (1000);
      SIM900.println("AT + CPIN = \"XXXX\""); //Comando AT para introducir el PIN de la tarjeta
      delay(25000); //Tiempo para que encuentre una RED
      Serial.println("PIN OK");
      SIM900.print("AT+CLIP=1\r"); // Activa la identificación de llamada
      delay(100);
      SIM900.print("AT+CMGF=1\r"); // Configura el modo texto para enviar o recibir SMS
      delay(1000);
      SIM900.print("AT+CNMI=2,2,0,0,0\r");   // Saca el contenido del SMS por el puerto serie del GPRS
      delay(1000);
    }

Y la recepción de caracteres va a ser también igual en el loop, sólo que esta vez iremos guardando los caracteres en una variable, como hemos indicado un poco más arriba.

 if (SIM900.available() > 0)
   {
       incoming_char = SIM900.read(); //Get the character from the cellular serial port.
       Serial.print(incoming_char); //Print the incoming character to the terminal.
       mensaje = mensaje + incoming_char ; // Añadimos el último caracter leído al mensaje
   }

Una vez tenemos el mensaje completo, vamos a ver si es una llamada, y a buscar el número de teléfono para encender un LED si está autorizado.

Para esto vamos a utilizar una función .indexof(). Esta función nos devuelve la posición, mediante un número entero, de una cadena o carácter dentro de una cadena de texto dada. En el caso de que no exista devuelve “-1”. La forma de usarlo es la siguiente:

 int pos = “texto”.indexOf(“caracteres a buscar”);
  if (pos >= 0)
      {
         Acciones que queremos realizar;
      }

Sabiendo esto crearemos una función identifica_llamada() para buscar primero el final de una llamada, y después el número de teléfono y si está autorizado.

Si recordáis la sesión anterior, una llamada finaliza con “NO CARRIER”, así que lo primero que haremos será buscarlo y si existe buscaremos los números de teléfono que hemos autorizado dentro del mensaje que hemos guardado. Si está autorizado cambiamos el estado del LED, y sino no hacemos nada.

Y una vez hecho todo esto, borramos el contenido de la variable mensaje para dejarla libre para la siguiente llamada.

 void identifica_llamada()
   {
      int finllamada = mensaje.indexOf("NO CARRIER");  //Buscamos el final de llamada
      if (finllamada >= 0)
         {
            for ( int i = 0; i < numtotal; i++) { int pos = mensaje.indexOf(agenda[i]); //Buscamos el número en la agenda if (pos >= 0)
                     {
                        estado = ! estado ;                       // cambiamos el estado
                        digitalWrite(LED, estado) ;
                        Serial.println("\nEl numero esta autorizado");
                     }
                }
            mensaje = "" ; //Bórralo para la próxima vez
       }
   }

Así el setup y el loop quedarían de la siguiente forma:

 void setup()
   {
      pinMode( LED, OUTPUT) ; // LED como salida
      inicializaSIM900();
   }

void loop()
   {
       if (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_llamada ();
   }

Podéis descargar el programa completo aquí: Encender_LED_llamada.

Cuando hagáis pruebas os recomiendo dejar sonar más de un tono, por si acaso se perdiera algún carácter durante el envío y no recojamos bien el número de teléfono. Con cada tono se manda una vez el número que nos está llamando, y así nos aseguramos de que alguna de las veces llegue bien. No pasa muchas veces, pero todos conocemos las leyes de Murphy…

 

DIFERENCIAR Y RECONOCER TEXTOS EN LOS SMS

 

En el caso del SMS va a ser muy parecido, pero vamos a reconocer el texto del mensaje y en función de lo que le enviemos encenderá o apagará el LED. De esta manera sabremos en todo momento el estado del mismo, ya que con la llamada lo encendíamos o lo apagábamos, pero de momento no teníamos forma de saber si estaba encendido o apagado (aunque también podríamos solucionar esto).

Con el SMS ya no vamos a necesitar buscar el final de la llamada ni autorizar números, porque nadie se va a equivocar y mandar un SMS con el texto concreto a nuestro Arduino por equivocación (ya me parece bastante raro que alguien mande un SMS), aunque si buscáis máxima seguridad no os sería muy difícil incluir también esa comprobación. Así que podemos prescindir de las variables que creábamos para ello.

Por lo demás el programa es exactamente igual, salvo la función final, que quedaría así:

 void identifica_SMS()
   {
      int led_on = mensaje.indexOf("Encender LED");  //Buscamos el texto en el SMS
      int led_off = mensaje.indexOf("Apagar LED");  //Buscamos el texto en el SMS
      if (led_on >= 0)
         {
            digitalWrite( LED, HIGH) ;
            Serial.println("\nLED ENCENDIDO");
            mensaje = "" ; //Bórralo para la próxima vez
         }
      if (led_off >= 0)
         {
            digitalWrite( LED, LOW) ;
            Serial.println("\nLED APAGADO");
            mensaje = "" ; //Bórralo para la próxima vez
         }
   }

Y el programa completo lo tenéis aquí: Encender_LED_SMS.

Ahora podéis combinar ambos si queréis que reaccione ante las dos cosas. Y si, como a mí, os siguen cobrando los SMS y no estáis por la labor de pagar más, os propongo que contéis los tonos de la llamada y en función de cuántos sean, encendáis o apaguéis el LED. Recordad que con cada tono el GPRS nos envía una cadena de caracteres “RING”.

 

Resumen de la sesión

 

En esta sesión hemos aprendido varias cosas importantes:

 
    • A controlar un LED a distancia usando nuestro móvil.
    • Hemos presentado y explicado la función .indexof().
    • A hacer un filtro en las llamadas para autorizar sólo algunos números basándonos en una agenda.
    • A diferenciar textos en los SMS y actuar en consecuencia.
 
 
 

LikeUsOnFacebook_Icon

 

(88) Comments

  • oye una pregunta, no tendras un codigo oh algo que funcione para la sim 808 evb-v3.1, tengo este codigo pero cuando abro el puerto serial solo se queda en donde dice esperando mensaje

  • Buenas, no entiendo mucho de Arduino. Pero siguiendo el tutorial he conseguido encender el led usando ese código. Funciono un tiempo. Pero ahora resulta que cuando cargo el código de nuevo no funciona y creo que es porque no encuentra red y no sé por qué. En el serial sale “OK”, “PIN OK” y no avanza (y esto lo hace incluso sin tarjeta o poniendo un pin incorrecto). Quizás se ha estropeado la SIM900, cuando activo la alimentación de la tarjeta nunca llega a cambiar la frecuencia de parpadeo a 3 o 4 segundos, se mantiene siempre en 1 s. Cualquier ayuda será bienvenida. Gracias.

    • Hola Víctor, prieba la tarjeta en un teléfono, no vaya a ser que no funcione.

  • Hola a todos como puedo hacer para que solo encienda el led con un solo numero de celular mediante el envió de mensajes y no con cualquier numero.
    Saludos.

    • Puedes hacerlo de la misma forma que en las llamadas, buscando el número en el cuerpo del mensaje. Un saludo.

  • No funciona he mandado sms pero el led no enciende,descargue el sketch pero nada,creo que el problema esta en el indexof ya que los caracteres que se reciben difieren del mensaje por lo tanto arrojan -1 y no se diferencia el comando

    • Qué caracterers recibes? Sólo tendrías que cambiar lo que buscas en el idexof para que coincidan y arreglarlo. Un saludo.

  • Hola que tal,buen aporte pero no me encienden el led,ni siquiera el embebido del arduino,lo que quiero es solo encenderlo por sms nada mas asi que solo descargue el encendido sms pero no arranca,ojo que si funciona la parte hasta el mensaje recibido,ya que el monitor serial si lo detecta,pero no enciende el led,podrias verificar la parte de identifica sms saludos

    • Hola, se supone que está probado y funciona… ¿No será posible que tengas ese led fundido no?

  • buenas noche jacobo Cordoba
    muchas gracias por crear la agenda para agregar usuarios por SMS, hay forma de crear algún comando para poder borrar números telefónicos de la misma agenda
    le Agradezco mucho su ayuda

  • Buenas noches
    Sr. Jacobo

    gracias por crear la agenda para agregar los números telefónicos por medio de SMS, tu me proprias ayudar a crear agenda que también se puedan borrar los números que se Hayan agregado por medio de SMS

    • Yilmar Mazo

    hola mira estoy utilizando una arduino mega portanto utilizo los puertos 19 y 18 para usarlos como Serial1 el problema es que cuado corro el programa me retorna otros caracteres que nada que ver

    OK
    PIN OK
    AT + CPIN = “XXXX”

    AT+CLIP=1
    AT+CMGF=1

    OK
    AT+CNMI=⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮

    cual podria ser el problema dado que los puertos los uso txrx rxtx y cambiar la palabra en el codigo SIM900Serial1

    me serviria mucho de tu ayuda ya que puedo enviar mensajes se que si los recibe pero no los puedo leer y puedo realizar llamadas como recibirlas

    • Que puedas enviar las llamadas y SMS es una buena señal, tiene pinta que el pin que usas para recibir no es compatible con la librería software serial. SOn estos los que puedes usar 10, 11, 12, 13, 14, 15, 50, 51, 52, 53, A8 (62), A9 (63), A10 (64), A11 (65), A12 (66), A13 (67), A14 (68), A15 (69).

      Lo más sencilo de todas formas es que uses uno de los otros tres puertos series que tiene el arduino mega a parte del 0.

  • Hola queria saber como lo puedo configurar para que abra mas de un rele

    • Hola Alexis, no tendrías más que sustituir la parte en la que encendemos el led con las instrucciones para abrir los relés que necesites. Si vas a utilizar varios te recomiendo que uses unocomo estos que te facilita el trabajo: https://www.prometec.net/producto/modulo-4-reles/

    • DANNY

    Hola. Estoy haciendo un proyecto electrónico y me he quedado estancado y necesito ayuda por favor necesito saber como hacer para que cuando este en una llamada con el sim900 quisiera que encienda leds diferentes cundo le mande 1 o 2 o 3 o 4 o 5 o 6 o 7 o 8 o 9 o 0 por medio del teclado de mi telefono personal con el cual estoy en una llamada con el sim900

    • Hola Danny, no sé si es posible hacer eso- A ver si alguien sabe algo.

        • DANNY

        si se puede, porque lo he visto en una alama comunitaria instalada en mi zona y solo que en vez de leds como mi proyecto este suena diferentes sonidos por un altavoz. bueno si alguien sabría como hacerlo, pues le estaría agradecido que me ayude

        • Intentaré sacar un rato para echarle un ojo, si te enteras de algo dinos porfa!

    • Enrique bravo

    muy buen tutorial, pero quisiera saber si el código funcionaria con un sim A7 que incluye un gps y quisiera utilizarlo, que necesitaría para utilizarlo

    • Hola Enrique, no encuentro información sobre el sim A7, más allá del galaxy A7.

  • Hola. Gracias por la ayuda que da usted en su página para que los demás podamos utilizar sus conocimientos.
    Tengo un problema que llevo semanas intentar solucionar.
    He conectado un módulo SIN800L al Arduino Uno. Los alimento de forma esterna. Todo me funciona genial, tanto enviar como recibir SMS.
    Pero el problema viene cuando también conecto un sensor de movimiento PIR al arduino, también alimentado externamente.
    El PIR lo conecto al pin digitar 2.
    El problema es que cuando recibo un SMS el pin 2 se pone HIGH y no se por qué. Y además el SMS no lo leo en la variable Comando hasta que no ha ejecutado el código que está en la ALARMA del PIR.
    aquí dejo el código del Void para que lo vea:

    void loop()
    {
    //Comprueba el SIM800 a ver si hay SMS +++++++++++++++++++++++++++++++++++
    if (SIM800.available()){
    Comando=SIM800.readString();
    Serial.println(“COMANDO LEIDO: ” + Comando);

    //Si recibe cualquier SMS que no es ATH lo reenvía al teléfono de llamadas.
    if (Comando!=”” && Comando.indexOf(“ATH”)<0){
    mensaje_sms(Comando);
    }
    Comando="";
    }

    //Si no recibe ningún SMS testea el sensor de movimiento +++++++++++++++++
    if (Comando==""){
    if (digitalRead(vPinMovimiento) == HIGH){
    Serial.println("ALARMA MOVIMIENTO");
    delay(1000);
    digitalWrite(vPinMovimiento, LOW);
    }
    }

    // Limpia el buffer del SIM800 ++++++++++++++++++++++++++++++++++++++++++
    if (SIM800.available()) Serial.write(SIM800.read());
    }

    Si yo le envío un SMS desde con mi móvil, siempre siempre lo promero que hace es escribir ALARMA MOVIMIENTO y luego me reenvia el SMS.
    Me activa el pin 2 y no lee el comando del SMS.
    Es como si al recibir un SMS hubiese movimiento en el PIR y eso NO es así.
    He hecho muchas variaciones del código pero siempre funciona igual. Llevo semanas con este problema.
    ¿Sabe que podría ser?
    Muchas gracias por su tiempo.

    • Hola Jesús Ángel, supongo que estás usando los pines 7 y 8 del Arduino así que no entiendo muy bien porque te ocurre eso.Has probado a poner el PIR en algún otro pin a ver si te ocurre lo mismo?

  • hola , primero felicitarlos por tan buena explicación , quisiera saber como puedo agregar los números autorizados por medio del puerto serial o por medio de un sms

    • Hola Felipe, tendrías que leer lo que entre por el puerto serie o por SMS (sería un poquito más complicado desde el SMS) y agregarlo a la primera posición vacía del array. Yo haría que al leer algún carácter guarde en un array de char los siguientes 9 caracteres, y de ahí los metes a la agenda.Intenta hacerlo y si tienes alguna duda concreta nos dices, de todas formas si tengo algo de tiempo lo intentaré probar.

        • Danny

        siii hazlo por sms, ayudanos please

        • A ver si puedo sacar un rato para ello!

      • Jacobo Cordova

      Hice algo similar espero les pueda ayudar
      //———————————————————–
      //Arriba en las declaraciones
      String agenda[] = {“xxxxxxxxx” , “”, “”}; //Array con los numeros autorizados
      int numMax = 3; //Cantidad posible de numeros de telefono autorizados
      int numtotal = 1; // numeros actualmente registrados
      ///———————————————————————-
      // En vez de identifica_sms() he creado la funcion
      // chequea_sms(); que para agregar un numero debe leer en el mensaje
      // Agregar 999999999 y entonces agrega ese numero

      void chequea_SMS()
      {
      int agregar = mensaje.indexOf(“Agregar”);
      if (agregar >= 0)
      {
      String nuevo = “”;
      for (int i = 0; i < 9; i++)
      {
      nuevo += mensaje.charAt(agregar + 8 + i);
      }
      agenda[numtotal] = nuevo;
      Serial.println(“Numero agregado: ” + nuevo);
      numtotal++;

      }
      mensaje = "" ; //Bórralo para la próxima vez
      }

    • Sergio

    Hola, cuando mencionas lo del pin 9, simplemente hay que soldar los dos contactos de la foto no?

    Saludos y muchas gracias!!

    • Eso es, para usar el encendidopor software del pin 9 tienes que soldar los contactos que comentamos. un saludo.

    • Alexis

    buena tarde, subi el codigo y timbra al llamar pero me saloe un error.
    OK
    PIN OK
    AT + CPIN = “0000”

    ERROR
    AT+CLIP=1

    OK
    AT+CMGF=1

    OK
    AT

    A esto no enciende el led (lo conecte al pto 13 y a gnd y no encendio)

    • Hola Alexis, el programa debería funcionar tal cual, así que lo más probable es que tengas algún fallo en las conexiones o que no hayas metido el número desde el que llamas dentro del String Agenda donde guardamos los números que queremos que puedan encender o apagar la luz. Un saludo.

    • Peña

    Perdona, olvida mi mensaje de hace unos días.

    Ya vi como funciona el programa, ojos que no ven……

    Gracias!!

  • Muy buenas! Necesito ayuda de algun alma caritativa xD Resulta que me encuentro en estos momentos en la etapa de “Proyecto Comunitario” de la carrera de Ing. Electrónica, y estoy haciendo un sistema de alarma para una grupo de casas, basado en arduino y por motivos varios se me hace imposible probar el sistema en fisica con el Sim900, el arduino y demas componentes, asi que no se a ciencia cierta si el codigo que he realizado esta bien o no, cabe destacar que soy novato aun en la programacion de arduino, y me ha tocado enfrascarme en este proyecto xD. El sistema se supone debe realizar lo siguiente:

    -Se tendrán varios numeros registrados y activada la identificacion de llamada del modulo GSM, esto para la agenda telefonica.
    -Si se recibe un llamada de uno de los numeros registrados se activara la alarma (altavoces y luces estroboscopicas).
    -También se podran recibir msjs e identificar su contenido a fin de poder activar “reinicios parciales o totales” del sistema:
    a) Si se envia un mensaje que diga “Matenimiento”, parpadeara 3 veces un LED verde.
    b) “Reset Programa”, reiniciara el programa.
    c) “Reset Sistema”, reiniciara el arduino mediante el pin de “RESET” que este posee.
    d) “Reset GSM”, reiniciara el SIM900

    -Una vez listo cualquier reinicio el sistema enviara un msjs de “Reinicio Completo”.
    -El codigo tambien posee comandos de “WatchDog” como mecanismo de seguridad.
    -Adicional, existen lineas de comando para mostrar la calidad de la señal o cobertura del GSM mediante el monitor serial en la PC, a la hora de instalar el sistema.
    -Asi mismo, poseera 3 leds indicadores de estados, un rojo para indicar que el arduino esta encendido, otro naranja para indicar que el GSM esta encendido, y el verde anteriomente mencionado que estara siempre activado e indicara que el codigo esta funcionando; este ultimo parpadera 3 veces al recibir un msjs que diga “Manteniento”, lo cual servira para probar el GSM. EL codigo es el siguiente; cabe mencionar que lo he hecho en base a lo visto en las varias paginas de este foro, pero necesito que alguien me diga si esta planteado, si asi como esta brinda todas las funciones que plantee, y en si, que me digan si el codigo funciona para lo que ya describi del sistema, y de no ser asi, que me ayuden a corregirlo por favor, de antemano muchas gracias!:

    #include
    #include
    #include
    SoftwareSerial SIM900(7, 8);
    char incoming_char = 0;
    String mensaje = “”;
    int LED = 10;
    int RELE = 11;
    int RESET = 12;
    char inSerial[256];
    bool estado = false ;
    String agenda[10] = {“+584267989946” , “+584249202682”};
    int numtotal = 10;

    void ShowSerialData()
    {
    wdt_reset();
    if (Serial.available() > 0)
    { int i = 0;
    while (Serial.available() > 0) {
    inSerial[i] = (Serial.read());
    i++;
    }
    inSerial[i] = ‘\0’;
    Serial.print(inSerial);
    }
    wdt_reset();
    }

    void setup()
    {
    wdt_disable();
    wdt_enable(WDTO_8S);
    digitalWrite( LED, HIGH) ;
    digitalWrite( RESET, HIGH) ;
    delay(200);
    pinMode( LED, OUTPUT) ;
    pinMode( RESET, OUTPUT) ;
    pinMode( RELE, OUTPUT) ;
    pinMode(9, OUTPUT);
    digitalWrite(9, HIGH);
    delay(1000);
    digitalWrite(9, LOW);
    delay (5000);
    SIM900.begin(19200);
    Serial.begin(19200);
    SIM900.print(“AT+CLIP=1\r”);
    wdt_reset();
    delay(1000);
    SIM900.print(“AT+CMGF=1\r”);
    delay(1000);
    SIM900.println(“AT+CPIN=\”1234\””);
    wdt_reset();
    delay(7000);
    wdt_reset();
    delay(7000);
    wdt_reset();
    delay(7000);
    wdt_reset();
    delay(7000);
    wdt_reset();
    Serial.println(“AT+CSQ”);
    delay(1000);
    ShowSerialData();
    }

    void identifica_llamada()
    {
    wdt_reset();
    int finllamada = mensaje.indexOf(“NO CARRIER”);
    if (finllamada >= 0)
    {
    for ( int i = 0; i = 0)
    {
    wdt_reset();
    for ( int j = 0; j > 3 ; j++) {
    digitalWrite( LED, HIGH) ;
    delay(200);
    digitalWrite( LED, LOW) ;
    delay(200);
    }
    wdt_reset();
    digitalWrite( LED, HIGH) ;
    mensaje = “” ;
    }

    if (reset1_on >= 0)
    {
    wdt_reset();
    reiniciarGSM();
    resetFunc();
    enviar_sms();
    delay(100);
    for ( int j = 0; j > 3 ; j++) {
    digitalWrite( LED, HIGH) ;
    delay(200);
    digitalWrite( LED, LOW) ;
    delay(200);
    }
    wdt_reset();
    digitalWrite( LED, HIGH) ;
    mensaje = “” ;
    }

    if (reset2_on >= 0)
    {
    wdt_reset();
    reiniciarGSM();
    digitalWrite( RESET, LOW); //Este pin debe conectarse al pin de reset del arduino mediante una resistencia de 1Kohm
    enviar_sms();
    delay(100);
    wdt_reset();
    }

    if (resetGSM >= 0)
    {
    wdt_reset();
    reiniciarGSM();
    }
    wdt_reset();
    }

    void loop()
    {
    wdt_reset();
    if (SIM900.available() > 0)
    {
    incoming_char = SIM900.read();
    mensaje = mensaje + incoming_char ;
    }
    wdt_reset();
    identifica_llamada ();
    wdt_reset();
    identifica_SMS();
    wdt_reset();
    }

    • Erik

    HOLA AMIGO me podrias decir que es lo que va en el AT+CPIN xxxx con que es lo que se sustituye las xxxx

    • Hola Erik, lo que ponemos ahí es el pin de la tarjeta SIM para desbloquearla. UN saludo.

    • Peña

    Hola Ivan.
    Muy bien explicado, gracias.

    Tengo una duda de como funciona la lectura del serial SIM900.

    En el setup() pongo en mi caso:
    SIM900.print(“AT+CMGR=1n”); //Imprime el SMS numero 1 en el puerto SIM900

    Luego desde el loop() se guarda todo lo que se haya escrito en el serial SIM900 dentro de la variable:
    incoming_char = SIM900.read();

    Y luego se pasa lo que hay en incoming_char a la variable mensaje:
    mensaje = mensaje + incoming_char ; // Añadimos al mensaje el ultimo caracter leido

    Y al final se llama a la funcion de identificar:
    identifica_SMS();

    Todo funciona correctamente, en la salida del Monitor Serial me muestra lo siguiente, como se esperaba:
    OK
    AT+CMGR=1
    +CMGR: “REC READ”,”+34000000000″,””,”17/07/16,10:13:37+08″
    Apagar LED
    LED APAGADO

    Mi duda es que esto solo se muestra una vez y se para, cuando debería mostrarse cada vez que el loop reinicie o sea si incoming_char = SIM900.read(); está dentro del loop(), cada vez que el loop se reinicie, debería guardar lo que se lee en el serial SIM900.

    No se si lo que lee en el serial SIM900 una vez leido se borra automáticamente y el loop ya no guarrda nada en la variable incoming_char.

    Perdona el ladrillo, espero se entienda la duda que tengo.
    Saludos.

    • Hola Peña, a ver si me acuerdo de como funcionaba jejeje. En principio creo que al final de la función identificar_llamada() borramos lo que teníamos guardado en el mensaje, así que cada vez que la llamamos borramos el contenido. No sé si con esto te contesto bien, si no me dices y te ayudo lo que puedo. Un saludo.

    • Cristian

    Hola buenas, fijate que estoy medio loco que ya no se que hacer con esto, pues les cuento, tengo el arduino con la sim900, lo tengo conectado a la pc con el monitor y efectivamente cuando envio el mensaje me enciende/apaga el led segun sea el caso, ahora el inconveniente que tengo es que cuando lo desconecto de la pc y lo llevo al banco de pruebas ya no me funciona, ya hice varias pruebas y lo curioso es que si lo conecto al monitor serial de la pc, me trabaja muy bien pero cuando ya no lo tengo conectado ya no trabaja, alguien ha tenido este inconveniente?

    ya probe con fuentes de alimentacion independientes y tambien una de 5V*2A.

    Saludos.

    • Hola Cristian, pues he mirado un poco el código por encima y no se me ocurre por qué puede pasar. Ahora mismo no puedo probarlo pero en unos días cuando pueda te digo algo. Un saludo.

Give a Reply

WordPress Anti-Spam by WP-SpamShield

¡Oferta: Mano robot!

Mano prostetica

Promoción especial de abril.

Compra tu kit mano articulada

40€