Boa tarde, montei esse projeto para fazer alguns testes, mas estou tento bastante problema para o retorno do SMS, ele recebe executa tudo certo, mas na hora de retornar ele falha, alguns voltam mas nem todos.
O que percebi que se for o mesmo comando que mandar ele não dá retorno, não sei se foi coincidência mas realmente falhou.
Eu gostaria que ele respondesse sempre.
Alguém teria alguma ideia?
Valeu!!
Este artigo foi escrito para uso mais didático e portanto, tem as suas limitações.
Quanto ao que pode estar acontecendo, tenho a seguinte suposição:
O programa foi simplificado ao máximo para 'caber' no PIC16f628a. Entre as simplificações foi o não uso de retornos de erros. Por exemplo, veja o código abaixo:
/****************************************************************************
Rotina de Apagamento dos SMS recebidos.
Limpa a memória do cartão SIM quanto as mensagens recebidas.
Isto evita repetição de acionamento quando lê SMS acumulados anteriormente
(note que devemos usar um cartão SIM exclusivo para controle remoto sob
o risco de perder todas mensagens).
*************************************************************************/
delay_1s(); <-----------------aqui
printf("AT+CMGD=1,4\r\n");//comando para apagar msn recebidos (todos)
delay_1s(); <------------------aqui
/*************************************************************************
Rotina de Confirmação do Comando Recebido
Envia SMS avisando que foi recebido comando e mostra estado das saídas
Altere o número do celular para o qual será enviado a notificação.
****************************************************************************/
printf("AT+CMGF=1\r\n");//modo texto
delay_1s();//aguarda receber 'ok' antes de enviar outro comando <--------------aqui
.........................................................................................................................................
Estes 'delay' de 1 segundo (marcados com 'aqui' nos comentários) foram incluindos 'supondo-se' que o comando tenha se completado dentro deste tempo (até que razoável). Mas pode acontecer de falhar e demorar mais tempo. Neste caso, não haveria uma sequência correta no programa, falhando.
O correto seria fazer um laço que fique esperando o comando resposta do AT ou seja, esperar o 'OK'. Se não receber dentro de um tempo, o programa deveria então reenviar o comando. Após um número definido de tentativas sem resposta, deverá sair da rotina, mas retornando um código de erro. Deve haver um tratamento para este código de erro, entre outros. A operadora também pode eventualmente, também enviar, via modulo sim800L , algum comando de erro. Estes também precisariam ser tratados.
Poderá analisar melhor o assunto estudando cuidadosamente o datasheet do SIM800L.
Resumindo: Fazer este controle funcionar 'redondo', sem falhas, usando este PIC ou
com outros pequenos microcontroladores, não será uma tarefa muito fácil, ao meu ver.
Você percebe que isto não 'caberia' nos poucos bytes que sobraram na flash do PIC.
Tente usar a plataforma Arduino, com um microcontrolador mais 'parrudo' como o
Arduino Mega, que usa um ATmega 2560 com 256K de flash.
Acredito que vá encontrar suporte para módulo SIM800L nas suas bibliotecas.
Espero que de alguma forma tenha ajudado. Mas não desista!
Desejo que tenha sucesso em sua empreitada!
opa amigo lário teria como vc fazer este mesmo exemplo mais usando ou sd card para cadastro dos cartões ou memoria eeprom externa?