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.