Conexion lcd-sim900-arduino

Good morning / Afternoon / Night, sorry for the inconvenience but dear help regarding the code of my project: My project consists of being able to visualize an SMS message through the LCD screen (without using an I2C), and the problem is that it doesn't do exactly that. It prints some welcome messages that it already has pre-set to show on the LCD, and in fact it sent an SMS message to the indicated phone number but when I send a message, a number or a letter does not show anything on the LCD. I don't know what it could be, I have already consulted with other people who have given me tips that I have been implementing, (such as the use of pins 7, 8 for SIM900 exclusively) but so far there has not been the expected result. I hope someone can help me or give me an idea of what I could be doing wrong, Thanks..

//Incluimos librerias necesarias
#include <SoftwareSerial.h> //para comunicarnos por el puerto serial
#include <LiquidCrystal.h> //para utiliar la pantalla
#include <Wire.h> //para utilizar el módulo sim900 del modulo gsm
#include “sms.h”

//Configuración de los puertos seriales de la pantalla
const int rs = 6, en =11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;

//Inicialización de el módulo GSM
SoftwareSerial SIM900(7, 8); 

//Inicialización de la pantalla con las variables de configuración
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);


char incoming_char=0; //variable para almacenar el mensaje entrante del modulo gsm
char almacena[100];//variable para almacenar el mensaje a imprimir
char entrada[1]; // variable para almacenar un solo char de entrada
int run = 0; //variable para ajustes de primer encendido
int leng = 0; //variable para conteo de longitud 1
int leng2 = 0;// variable para conteo de longitud 2
char str1[16];// primera longitud de caracteres
char str2[16];//segunda longitud de caracteres
char str3[16];//tercera longitud de caracteres

//Arranque de configuración inicial

void encenderSIM900()
{
  pinMode(9, OUTPUT);
  digitalWrite(9, LOW);
  delay(1000);
  digitalWrite(9, HIGH);
  delay(2000);
  digitalWrite(9, LOW);
  delay(3000);
}

void setup() {
  encenderSIM900();
  delay(8000);
  //Iniciamos comunicación serial para monitorear módulo GSM en tasa baud (19200)
  Serial.begin(19200);

  //Iniciamos la comunicación con el módulo GSM (a una tasa de 19200) y lo encendemos
  SIM900.begin(19200);
 

  //Inicializamos la pantalla
  lcd.begin(16,2);
  lcd.print("...Preparing...."); //Avisamos en la pantalla que hay una configuracion inicial 
  delay(3000); // Ponemos un retraso para dar tiempo a la 
  lcd.clear();//Limpiamos la pantalla
  SIM900.print("AT+CMGF=1\r"); // seleccionamos modo de texto en el modulo GSM enviando esto
  SIM900.print("AT+CNMI=2,2,0,0,0\r"); //habilitamos la comunicación serial del módulo GSM
  incoming_char = SIM900.read();
  Serial.print(incoming_char);
   //mandamos mensaje de prueba para comprobar que el sistema está activo
  lcd.clear();//limpiamos pantalla
  lcd.print("SMS setup test");//informamos al usuario
  delay(3000);//pequeño retraso
  sendSMS(); //enviamos mensaje de prueba

}

//codigo a ejecutar de forma continua
void loop() {  //inicio del ciclo
  
  //Si el módulo GSM se encuentra disponible...    
  if(SIM900.available() >0)
  {//comienzo del if 1
    
    incoming_char=SIM900.read(); //Obtenemos entrada de ultimo mensaje
    Serial.print(incoming_char); //Imprimimos a serial para monitoreo
    muestra_mensaje();
    if(incoming_char == '*')//si el mensaje tiene un asterisco al principio sabemos que es un mensaje 
    {//comienzo del if 2
      lcd.clear();//limpiamos la pantalla
      incoming_char = SIM900.read();//leemos el siguiente char de entrada
      leng = 0;
      while(incoming_char!= '*')//mientras no sea un asterisco lo imprimimos a pantalla
      {//comienzo de while 1

        /************codigo original************/
        
        Serial.print(incoming_char); //para monitorear el programa
        lcd.print(incoming_char); //imprimimos en pantalla el caracter ya que es un mensaje
        incoming_char = SIM900.read();//leemos el siguiente char
        
SIM900.print("ATD");//Comando AT para iniciar una llamada
  SIM900.print("+522212603286");//Número de telefono al cual queremos llamar
  SIM900.println(";");//El ";" indica llamada de voz y no llamada de datos ej:(FAX) 
  Serial.println("Llamando...");//Leyenda que indica que se inicio el llamado
  delay(100000);//Duración del llamado antes de cortar
  SIM900.println("ATH"); // comando AT cortar llamada



        
        if(leng<16)
        {
        str1[leng] = incoming_char;
        }
        else
        {
          leng2 = 0;
          if(leng2<16 )
          {
            str2[leng2] = incoming_char; 
            leng2++;   
          }
        }
        incoming_char = SIM900.read();
        Serial.print(incoming_char);
        leng++; //aumentamos el conteo de caracteres
        
      }//fin del while 1
      run = 2; //ya existe un mensaje disponible
    }//fin del if 
    
  }//fin del if 1
}//fin del ciclo
void muestra_mensaje()
{
   //ya hay mensajes disponibles    
     if(run > 1)
     {
      lcd.print(str1);
      delay(2000);
      lcd.clear();
      lcd.print(str2);
      delay(1500);
      lcd.clear();
     }
     else
     {
      delay(1000);
      lcd.clear();      
     }
}


//Envio de SMS
void sendSMS() {
  //Limpiamos la pantalla
  lcd.clear();
   SIM900.print("AT+CMGF=1\r");
   SIM900.println("AT + CMGS = \"+-----------\""); //Configuramos el recipiente del mensaje (hay que incluir codigo de país)
//----------- (Propio)
//----------- (Opcional 1)
//----------- (Opcional 2)
  SIM900.println("AT + CNUM");
  delay(100);//damos un pequeño retraso 
  
  SIM900.println("Success connecting to network!"); //Configuramos el mensaje 
  delay(100);//damos un pequeño retraso

  SIM900.println((char)26); //Configuramos el fin del mensaje
  delay(100);//damos un pequeño retraso
  SIM900.println();
  lcd.print("Sending......");
  delay(5000); //le damos al modulo un retraso para poder enviar el mensaje
  lcd.clear();
  lcd.print("Setup Successful");//imprimimos pantalla de éxito
  delay(2000);//damos un pequeño retraso
  lcd.clear();//limpiamos la pantalla
  lcd.print("No message :|");
  run = 1; //Establecemos que no es la primera ejecucion del programa
}

Notes: I feed the arduino, the module and the LCD through the power input of the SIM900 using an eliminator with a 5v output, when compiling the code it does not show any problem and the SIM has balance.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.