SIM808 no recibe mensajes

Ante todo buenos dias, tengo el siguiente problema. Tengo un modulo SIM808 el cual ya me tiene loco, hace unas semanas me funcionaba la recepción de mensajes, pero hace unos dias dejo de hacerlo. He intentado buscar en internet soluciones y nada. Probe varios códigos que a sus respectivos autores les funcionaba, pero nada. La configuración inicial de recepción de mensajes (AT+CMGF y AT+CNMI) generan respuesta "OK" del módulo sim, lo cual me da a entender que este no tiene una falla. Una curiosidad, es que al enviar los mensajes no encuentro reacción, pero luego de enviar los mensajes, yo realizo un llamado al modulo y este se destraba momentáneamente, ya que mientras dura ese llamado arranca a ejecutar los ciclos de códigos correspondientes a la recepción de mensajes. Claramente al finalizar la llamada, me encuentro en el mismo problema. También utilize un código para realizar una conexión TCP y funciono correctamente, por ende el problema esta enfocado específicamente en los SMS. Proceso a adjuntar el código que utilizo.

char txt;
void setup()
{
Serial1.begin(19200);//Arduino se comunica con el SIM900 a una velocidad de 19200bps   
Serial.begin(19200);//Velocidad del puerto serial de arduino
delay(20000);//Tiempo prudencial para el escudo inicie sesión de red con tu operador
Serial1.println("ATI");
delay(200);
simRX();
Serial1.println("AT+CMGF=1\r");
delay(200);
simRX();
Serial1.println("AT+CNMI=2,2,0,0,0\r");
delay(200);
simRX();
}
void loop(){  
if(Serial1.available() >0) {//Verificamos si hay datos disponibles desde el SIM900
    txt=Serial1.read(); // Leemos los datos y los almcanamos en la variable mensaje
    Serial.print(caracter); //Imprime los datos entrantes uno a uno en el terminal serial
    if(caracter=='H'){
      Serial.println("Led encendido");
      digitalWrite(41, HIGH);
      }
    if(caracter=='L'){
      Serial.println("Led apagado");
      digitalWrite(41, LOW);
      }  
  }
}


void simRX()//Ver que va entregando el sim900
{
while(Serial1.available()!=0)
Serial.write(Serial1.read());
}

Sobre el código, la variable txt previamente la tenia igualada a 0, pero leyendo en foros de internet decían que eso podía generar que la variable crezca hasta llenar el buffer.

Todo esto lo estoy controlando con un Arduino Due, por lo cual no utilizo la librería SoftwareSerial.

Ese código tiene algunos errores:
Para comenzar, no puede ser el mismo código que te funcionaba porque esto ni compila, o sea que lo modificaste.

txt=Serial1.read(); // Leemos los datos y los almacenas en la variable mensaje
    Serial.print(caracter); //Imprime los datos entrantes uno a uno en el terminal serial
    if(caracter=='H'){

txt esta definido como char pero luego imprimes caracter que no esta definido y consultas con caracter que tampoco lo esta.
Esa consulta if(caracter=='H') no se puede hacer con cualquier tipo de variable para caracter.
Si es String tal vez pero si es char no.

Hola surbyte. Gracias por responder a mi consulta. Tenes razón, la variable carácter no tenia que estar allí, las modifique de tanto toquetear y no me avive. De todos modos procedi a corregir ese grave error, pero me encuentro en la misma situación, ya que al compilar el código nuevamente no recibo respuesta del modulo sim. Lo de usar una String en vez de Char lo pensé, incluso lo había intentado antes y me generaba un problema de conversión de tipo de variable, pero igual adjunto ahora el código nuevamente, solo que le deje la variable tipo String, y así tal cual me sale el siguiente error.

String txt;
void setup()
{
Serial1.begin(19200);//Arduino se comunica con el SIM900 a una velocidad de 19200bps   
Serial.begin(19200);//Velocidad del puerto serial de arduino
delay(20000);//Tiempo prudencial para el escudo inicie sesión de red con tu operador
Serial1.println("ATI");
delay(200);
simRX();
Serial1.println("AT+CMGF=1\r");
delay(200);
simRX();
Serial1.println("AT+CNMI=2,2,0,0,0\r");
delay(200);
simRX();
}
void loop(){  
if(Serial1.available() >0) {//Verificamos si hay datos disponibles desde el SIM900
    txt=Serial1.read(); // Leemos los datos y los almcanamos en la variable mensaje
    Serial.print(txt); //Imprime los datos entrantes uno a uno en el terminal serial
    
    if(txt=='H'){
      Serial.println("Led encendido");
      digitalWrite(41, HIGH);
      }
   if(txt=='L'){
      Serial.println("Led apagado");
      digitalWrite(41, LOW);
    }  
}
}


void simRX()//Ver que va entregando el sim900
{
while(Serial1.available()!=0)
Serial.write(Serial1.read());
}

Arduino:1.8.13 (Mac OS X), Tarjeta:"Arduino Due (Programming Port)"

SIM_SMS_PRUEBA:22:13: error: invalid conversion from 'char' to 'const char*' [-fpermissive]
if(txt=='H'){
^

^
SIM_SMS_PRUEBA:26:12: error: invalid conversion from 'char' to 'const char*' [-fpermissive]
if(txt=='L'){
^
In file included from /Users/root1/Library/Arduino15/packages/arduino/hardware/sam/1.6.11/cores/arduino/Arduino.h:192:0,
from sketch/SIM_SMS_PRUEBA.ino.cpp:1:);}
^
exit status 1
invalid conversion from 'char' to 'const char*' [-fpermissive]

Al código así tal cual, si en vez de usar String uso char, compila sin problema. El tema es que en la ejecución no me llegan los mensajes.

Ese código igual no es de mi invención, sino que lo saque de la siguiente pagina y lo reduje mas basico: http://rogerbit.com/wprb/2018/05/sim900-primeros-pasos-envio-de-sms-llamada-encendido-de-led/

#include <SoftwareSerial.h>
SoftwareSerial SIM900(7, 8);//Configarión de los pines serial por software
char caracter=0;// Variable para guardar los caracteres mensajes entrantes
int led=12;
String estado="";
void setup() {
   SIM900.begin(19200);//Arduino se comunica con el SIM900 a una velocidad de 19200bps
   Serial.begin(19200);//Velocidad del puerto serial de arduino 
   delay(20000);//Tiempo prudencial para el escudo inicie sesión de red con tu operador
 pinMode(led, OUTPUT);
  SIM900.print("AT+CMGF=1\r");// comando AT para configurar el SIM900 en modo texto
  delay(200);
  SIM900.print("AT+CNMI=2,2,0,0,0\r");//Configuramos el módulo para que muestre los SMS por el puerto serie.
  delay(200);
}
void loop() {  
  if(SIM900.available() >0) {//Verificamos si hay datos disponibles desde el SIM900
    caracter=SIM900.read(); // Leemos los datos y los almcanamos en la variable mensaje
    Serial.print(caracter); //Imprime los datos entrantes uno a uno en el terminal serial
    if(caracter=='H'){
      Serial.println("-->enviando mensaje");
      digitalWrite(led, HIGH);
      estado="led encendido";
      envioMensaje(estado);
      }
    if(caracter=='L'){
      Serial.println("-->enviando mensaje");
      digitalWrite(led, LOW);
      estado="led apagado";
      envioMensaje(estado);
      }  
  }
}
void envioMensaje(String estado) {
  SIM900.println("AT + CMGS = \"xxxxxxxxxxx\"");//reemplzar por el número a enviar el mensaje
  delay(200);
  SIM900.println("Estado:" + estado);// Reemplzar por el texto a enviar
  delay(200);
  //Finalizamos este comando con el caracter de sustitución (→) código Ascii 26 para el envio del SMS
  SIM900.println((char)26); 
  delay(200);
  SIM900.println();

Claramente al tener Arduino Due solo elimine la lib SoftwareSerial y modifique SIM900. por Serial1. Y así compila, pero me encuentro en el mismo problema inicial. Recibos los OK de los comandos AT iniciales, pero no pasa de eso.