je suis en train de faire un projet 'commande par gsm d'un automate programmable' le module GSM est un téléphone portable connecté avec PIC 18F6622 on a commencé par allumer une Led avant de commandee l'automate pour vérifier si le message est reçu.
l'utilisateur envoie un SMS qui contient allumer au téléphone connecté au pic pour allumer cette Led à l'aide des commandes AT le pic reçoit ce message le lire puis activé le pin correspendant. j'ai fai le code mais ça n'a pas marché
j'ai besoin de votre aide s'il vous plait
voici le code:
Code://**** Declaration des variables char cmd="AT"; char clip="AT+CLIP=1"; char cmgf="AT+CMGF=1" ; char ata="ATA+21621489141" ; char cpms="AT+CPMS=TA" ; char cnmi= "AT+CNMI=2,1, 0,0,0" ; char cmgr="AT+CMGR=1" ; char cmgd="AT+CMGD=1" ; char all="allumer" ; char num="+21621489141"; char l_a="led_allumé"; char d_e="dsl_erreur"; //***reception des appels *** void reception_des_appels() { UART1_Write_Text(cmd); UART1_Init(9600); // initialisation du protocol USART avec vitesse d'echange des données de 9600 UART1_Write_Text(clip); // initialiser le module GSM de manière à ce qu'il communique les UART1_Write_Text(ata) } //***reception du message*** void reception_message() { UART1_Init(9600); Delay_ms(100); UART1_Write_Text(at); // Envoi de la commande AT UART1_Write(13); UART1_Write(10); // Code ASCII equivalent pour ENTRE delay_ms(1000); UART1_Write_Text(cmgf); // choisir le mode texte en positionnant en 1 UART1_Write(13); UART1_Write(10); delay_ms(1000); UART1_Write_Text(cpms); // la mémoire choisie est la mémoire de la télephone UART1_Write(13); UART1_Write(10); delay_ms(1000); UART1_Write_text(cnmi); // extraire touts les message reçus : à vérifier UART1_Write(13); UART1_Write(10); delay_ms(1000); } //***lecture du message**** void lecture_message(){ UART1_Write_Text(cmgr); // la lecture du message de l'enplacement 1 UART1_Write(13); delay_ms(1000); UART1_Write_Text(cmgd); // supprimer le message dans l'emplacement 1 UART1_Write(13); delay_ms(1000); } //emission message void Emission_Message(char X){ // X le contenu de notre message UART1_Write_Text(at); // Envoi de la commande AT UART1_Write(13); // Code ASCII equivalent pour ENTRE UART1_Write(10); // Code ASCII equivalent pour (CTRL+H) delay_ms(1000); UART1_Write_Text(csms); // Envoi de la commande "AT+CSMS" pour la selection de service de messagerie UART1_Write(13); UART1_Write(10); delay_ms(1000); UART1_Write_text(cmgf); // Envoi de la commande "AT+CMGF=1" pour la selection du format du SMS le 1 pour le mode TEXT UART1_Write(13); UART1_Write(10); delay_ms(1000); UART1_Write_Text(cmgs); // Commande pour l'envoi d'un SMS,en indiquant le numéro du destinataire UART1_Write(34); // code ASCII de (") UART1_Write_text(num); UART1_Write(34); // code ASCII de (") UART1_Write(13); UART1_Write(10); delay_ms(1000); UART1_Write_Text(X); // le contenu de notre message UART1_Write(13); UART1_Write(10); delay_ms(1000); } //programme principale void main{ char R; UART1_Init(9600); TRISD=0X00; PORTD.f0=0; reception des appels() Delay_ms(100); loop: reception_message(); Delay_ms(100); lecture_message (); Delay_ms(100); if(UART1_Data_Ready()) R=UART1_Read(); if(R==all) PORTD.f0=1; X=l_a ; Emission_Message(); else X=d_e; Emission_Message(); goto loop }
-----