Bienvenue aux nouveaux arrivants sur FantasPic !
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
Modérateur : Jérémy
Module GSM2-Click
Après je ne sais paas si c'est un rapport, On a les SMS illimité, mais j'ai eu une connaissance qui c'est vu bloqué son forfait car d'après l'opérateur elle en envoyer tellement qu'ils pensaient qu'elle faisait de la revente de SMS " du deal de SMS " . Ça parait improbable mais c'est la vérité.
Après j'ai déjà eu des cartes sim hs du jour au lendemain.
Logiquement chez Orange ils vont faire un dump de la sim notamment pour le répertoire enregistré dedans.
Tu nous tiendras au courant.
@++
Après j'ai déjà eu des cartes sim hs du jour au lendemain.
Logiquement chez Orange ils vont faire un dump de la sim notamment pour le répertoire enregistré dedans.
Tu nous tiendras au courant.
@++
Module GSM2-Click
-
Jérémy
Administrateur du site- Messages : 2725
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Retour de chez orange . Impeccable SIM changée et tout roule de nouveau .
essai de la dernière version du programme. Pas un bug de trouvé ( encore ...) , c'est plutôt bon signe .
Je vais faire des tests sur la précision de l'alarme. Comme le module ce mets a jour sur l'heure du réseau normalement c'est bon .
Après quelques tests je passe à l'optimisation. ( genre faire des fonctions plus propres) nettoyer les variables etc .... Après je sais pas si y'a grand chose a optimiser en fait .
Pour la fonction ternaire , je ne suis pas encore assez à l'aise pour l'utiliser mais je prends note .
Pour l'imbrication des switch case les uns dans les autres, comme me l'a préconisé Claudius, je ne suis pas chaud non plus pour la lisibilité
Si vous voyez autre chose je suis preneur
@Paul : tu m'avais parlé de mettre le texte en dur je crois dans un autre post . Mais j'ai quand même pas mal de texte, crois que que ca vaille le coup ? quelle est serait les bénéfices ? vitesse , mémoire .
essai de la dernière version du programme. Pas un bug de trouvé ( encore ...) , c'est plutôt bon signe .
Je vais faire des tests sur la précision de l'alarme. Comme le module ce mets a jour sur l'heure du réseau normalement c'est bon .
Après quelques tests je passe à l'optimisation. ( genre faire des fonctions plus propres) nettoyer les variables etc .... Après je sais pas si y'a grand chose a optimiser en fait .
Pour la fonction ternaire , je ne suis pas encore assez à l'aise pour l'utiliser mais je prends note .
Pour l'imbrication des switch case les uns dans les autres, comme me l'a préconisé Claudius, je ne suis pas chaud non plus pour la lisibilité
Si vous voyez autre chose je suis preneur
Code : Tout sélectionner
/*
Test du module GSM2 click
* Description:
Ce programme utilise le module GSM Quectel M95 pour envoyer et recevoir des SMS
Je controle ma carte easy PIC et envoie son état par SMS .
*configuration:
MCU: PIC18F46K22 : http://ww1.microchip.com/downloads/en/DeviceDoc/41412F.pdf
Carte: EasyPIC7 : http://www.mikroe.com/easypic/
Oscillateur: HS 8.0000 MHz, 8.0000 MHz Crystal PLL disable
modules ext.: gsm2 clickick : http://www.mikroe.com/click/gsm2/
Quectel M95 : https://www.soselectronic.hu/a_info/resource/c/quectel/M95_ATC_V1.0.pdf
SW: mikroC PRO for PIC : http://www.mikroe.com/mikroc/pic/
* NOTES:
- Le clignotement de la led rouge "NET" rapide pas de connexion , lentement Connexion
*/
#include "timelib.h"
#define PWRKEY RE1_bit
//##############################################################################
//################## DECLARATION VARIABLES/CONSTANTES ###################
//##############################################################################
char SMS_a_envoyer[50]={0};
char SMS_Recu[50];
char Composition_numero[50];
char Gdh[50];
char Numero_tel[20]; // tableau pour placer le numéro de téléphone en string format : {"+336********"}
char Val_Jours[4];
char Val_Heures[4];
char Val_Minutes[4];
char Val_Secondes[4];
char Val_Jours_restant[4];
char Val_Heures_restant[4];
char Val_Minutes_restant[4];
char Val_Secondes_restant[4];
char Val_Signal[7];
unsigned char Jours_restant=0, Heures_restant=0, Minutes_restant=0, Secondes_restant=0, Valeur=0, Heures=0, Minutes=0, Secondes=0;
unsigned char Signal=0, temp=0, Erreur=0 ;
unsigned char Ok=0, Buzzer=0, CMTI=0, SMS_enregistre=0, Fleche=0,reponse_a_envoyer=0;
unsigned char Demande_Lancement=0, Demande_Lancement_Reveil, Lancement=0, Fin_Chrono=0, Flag_Mah=0;
unsigned int Gdh_An, Gdh_Mois, Gdh_Jour ,Gdh_Heure ,Gdh_Minutes ,Gdh_Secondes ;
unsigned int Rev_An ,Rev_Mois ,Rev_Jour ,Rev_Heure ,Rev_Minutes ,Rev_Secondes ;
unsigned int i=0;
unsigned long Chrono=0, epoch1=0, epoch2=0, diff=0;
TimeStruct ts1, ts2 ;
// ------------------- boucle d'attente -----------------------------
// Elle permet de mettre le module dans une position connue
void attente(){
i= Ok = 0;
while(Ok==0) // Ici on envoie la commande "AT" tant que le Flag "Ok" n'est pas levé
{
i++;
UART1_Write_Text("AT");
UART1_Write(13);
delay_ms(500);
if (i>=25) // Au bout de 25 tentatives on RESET
{
asm reset;
}
else if (i>=10) // Au bout de 10 tentatives on reset les variables
{
Valeur = SMS_enregistre = Chrono = CMTI = temp = Fleche = reponse_a_envoyer = 0;
Demande_Lancement = Demande_Lancement_Reveil = Lancement = 0 ;
}
}
i = Ok = 0;
}
// -------------------------- EFFACE le SMS recu -----------------------------
void RAZ_SMS_Recu(){
for (i=0;i<=50;i++){
SMS_Recu[i] = 0;
}
i = 0;
}
// -------------------- Compose le numéro de téléphone -----------------------
void Composition(){
Composition_numero[0]=0;
strcat(Composition_numero, "AT+CMGS=\""); // rajoute la commande d'envoi de message(CMGS) et on ouvre les guillemets
strcat(Composition_numero, Numero_tel); // On rajoute le nuémro de tel, Ex: "AT+CMGS=06******xx\""
strcat(Composition_numero, "\""); // et on ferme les guillemets
strcat(Composition_numero, 0);
UART1_Write_Text(Composition_numero);
UART1_Write(13);
delay_ms(500);
}
//######################## INTERRUPTION ################################
void interrupt(){
if ((TMR0IF_bit) && (TMR0IE_bit)) { // TIMER 0 interruption toute les secondes
TMR0IF_bit = 0;
TMR0H = 0x0B;
TMR0L = 0xDC;
PORTD.B7 = ~PORTD.B7;
Chrono--;
if (Chrono==0)
{
Fin_Chrono = 1;
}
}
// Lecture des données dans le buffer UART par INT
if (RCIF_bit == 1) { // Si INT UART détecté
temp = UART1_Read(); // On récupere et stock la donnée
switch (Valeur){
case 0:{
if (temp == 'O') // "OK"
Valeur = 1;
else if (temp == 'C') // "CMTI" ou "CSQ"
Valeur = 20;
else if (temp == '"') // "N° de tel" ou "Gdh"
Valeur = 30;
else if (temp == '>') // "Fleche"
Valeur = 50;
else if (temp == 'E') // "ERROR"
Valeur = 100;
else
Valeur = 0;
break;
}
case 1:{
if (temp == 'K')
Valeur = 2;
else
Valeur = 0;
break;
}
case 2:{
if (temp == 13)
Valeur = 3;
else
Valeur = 0;
break;
}
case 3:{
if (temp == 10)
{
Ok = 1; // On a recu le mot "OK , on léve le drapeau
Valeur = 0;
}
else
Valeur = 0;
break;
}
case 20:{
if (temp == 'M')
Valeur = 21;
else if (temp == 'S')
Valeur = 25;
else
Valeur = 0;
break;
}
case 21:{
if (temp == 'T')
Valeur = 22;
else
Valeur = 0;
break;
}
case 22:{
if (temp == 'I')
{
CMTI = 1; // On a recu "CMTI", on léve le drapeau
Valeur = 0;
}
else
Valeur = 0;
break;
}
case 25:{
if (temp == 'Q')
Valeur = 26;
else
Valeur = 0;
break;
}
case 26:{
if (temp == ':') // On a recu "CSQ" on enregistre la valeur
Valeur = 27;
else
Valeur = 0;
break;
}
case 27:{
if (temp == ' ')
Valeur = 28;
else
Valeur = 0;
break;
}
case 28:{
if (temp >= '0' && temp <= '9')
{
Val_Signal[0] = '0' ;
Val_Signal[1] = temp ;
}
Valeur = 29;
break;
}
case 29:{
if (temp >= '0' && temp <= '9')
{
Val_Signal[0] = Val_Signal[1] ;
Val_Signal[1] = temp ;
}
Val_Signal[2] = 0;
Valeur = 0;
break;
}
case 30:{
if (temp == '+') // On enregistre le numéro de téléphones
{
Numero_tel[0] = temp;
i = 1;
Valeur = 31;
}
else if (temp == '2') // On enregistre la date
Valeur = 40;
else
Valeur = 0;
};break;
case 31:{
if (temp >= '0' && temp <= '9')
{
Numero_tel[i] = temp;
i++;
}
else if (temp == '"')
{
Numero_tel[i] = 0;
i = 0;
Valeur = 0;
}
else
{
Numero_tel[0] = 0;
i=0;
Valeur = 0;
}
};break;
case 40:{
if (temp == '0')
Valeur = 41;
else
Valeur = 0;
break;
}
case 41:{
if (temp == '1')
{
Gdh[0] = temp;
i = 1;
Valeur = 42;
}
else
Valeur = 0;
break;
}
case 42:{
if (temp != '"')
{
Gdh[i] = temp;
i++;
}
else
{
Gdh[i] = 0;
i = 0;
Valeur = 43;
}
break;
}
case 43:{
if (temp == 13)
Valeur = 44;
else
Valeur = 0;
break;
}
case 44:{
if (temp == 10)
{
i=0;
Valeur = 45;
}
else
Valeur = 0;
break;
}
case 45:{
if (temp != 13)
{
SMS_Recu[i] = temp;
i++;
}
else
{
SMS_Recu[i] = 0;
i = 0;
Valeur = 0;
}
break;
}
case 50:{
if (temp == ' ')
{
Fleche = 1;
Valeur = 0;
}
else
Valeur = 0;
break;
}
case 100:{
if (temp == 'R')
Valeur = 101;
else
Valeur = 0;
break;
}
case 101:{
if (temp == 'R')
Valeur = 102;
else
Valeur = 0;
break;
}
case 102:{
if (temp == 'O')
Valeur = 103;
else
Valeur = 0;
break;
}
case 103:{
if (temp == 'R')
{
Erreur = 1;
Valeur = 0;
}
else
Valeur = 0;
break;
}
default: valeur = 0;
}
}
}
//##############################################################################
//############################ MAIN ####################################
//##############################################################################
void main(){
ANSELA = ANSELB = ANSELC = ANSELD = ANSELE = 0; // Tous les PORT en Digital
SLRCON = 0; // Set output slew rate on all ports at standard rate
TRISB = 0XFF ; // Entrée
TRISD = 0X00 ; // Sortie
TRISE = 0x00 ; // Sortie
LATD = 0; // Mis à zéro des sorties
LATE = 0; // Mis à zéro des sorties
//------------------------------------------------------------------------------
// Réglages de l'interruption
RC1IE_bit = 1; // INT UART activé
PEIE_bit = 1; // INT péripheriques Activé
GIE_bit = 1; // INT Global activé
//------------------------------------------------------------------------------
// Réglages du Timer 0 pour 1 secondes
T0CON = 0x84;
TMR0H = 0x0B;
TMR0L = 0xDC;
TMR0IE_bit = 0; // TIMER 0 Non activé au départ
//------------------------------------------------------------------------------
// Activation de l'alim avec la pin PWRKEY
PWRKEY = 0; // Mise à zéro
delay_ms(3000); // Maintenir à 0 pendant plus de 2S
PWRKEY = 1; // Allume le module
//------------------------------------------------------------------------------
UART1_Init(4800); // Initialisation de l'UART
Delay_ms(100);
Sound_Init(&PORTC, 2); // Initialisation du Sound
Delay_ms(100);
//------------------------------------------------------------------------------
// Parametrages du débit
while(1){
UART1_Write_Text("AT"); // Envoi commande "AT"
UART1_Write(13);
delay_ms(100);
if ( Ok == 1)
{
Ok = 0;
break;
}
}
delay_ms(8000); // Configuration du baud-rate , ensuite initilaistaion du module
//------------------------------------------------------------------------------
// Parametrages du module
while(1){
UART1_Write_Text("AT+CMGF=1"); // Reglage des messages de type "texte"
UART1_Write(13);
delay_ms(100);
if ( Ok == 1)
{
Ok = 0;
break;
}
}
while(1){
UART1_Write_Text("ATE0"); // Désactivation de la commande "Echo"
UART1_Write(13);
delay_ms(100);
if ( Ok == 1)
{
Ok = 0;
break;
}
}
while(1){
UART1_Write_Text("AT+QMGDA=\"DEL ALL\""); // Envoi la commande pour effacer tous les messages
UART1_Write(13);
delay_ms(100);
if ( Ok == 1)
{
Ok = 0;
break;
}
}
while(1){
UART1_Write_Text("AT"); // Envoi commande "AT"
UART1_Write(13);
delay_ms(100);
if ( Ok == 1)
{
Ok = 0;
break;
}
}
//------------------------------------------------------------------------------
// 3 Bips pour signifier l'initialisation c'est bien passéee et finie
for (i=0;i<=2;i++){
Sound_Play(2000, 50); // On joue un son
delay_ms(50);
}
i = Valeur = Ok = SMS_enregistre = Signal = 0;
//##############################################################################
//####################### BOUCLE PRINCIPALE ################################
//##############################################################################
while(1) {
if (CMTI) // On a recu un nouveau message
{
attente();
CMTI = 0;
UART1_Write_Text("AT+CMGL=\"REC UNREAD\""); // On demande à le lire
UART1_Write(13);
while (Ok!=1); // Je reste ici pour enregistrer toute mes infos
Ok = 0;
attente();
SMS_enregistre = 1; // Je signale que j'ai finis de l'enregistrer
}
if (SMS_enregistre) // Si il y a eu un nouveau message et que je l'ai enregistré
{
SMS_enregistre = 0;
//----- On efface le message ( tous les messages)
UART1_Write_Text("AT+QMGDA=\"DEL ALL\"");
UART1_Write(13);
attente();
// ----- On met à jour le Gdh au premier SMS
if (Flag_Mah==0)
{
Flag_Mah = 1;
Gdh[8]=',';
UART1_Write_Text("AT+CCLK=\"");
UART1_Write_Text(Gdh);
UART1_Write_Text("\"");
UART1_Write(13);
attente();
}
//----------------- On recoit "CHRONO" ---------------------------
if ( ((SMS_Recu[0]=='C')||(SMS_Recu[0]=='c')) && ((SMS_Recu[1]=='H')||(SMS_Recu[1]=='h')) && ((SMS_Recu[2]=='R')||(SMS_Recu[2]=='r')) )
{
Heures = (((SMS_Recu[8])-48)*10)+(((SMS_Recu[9])-48));
Val_Heures[0]= SMS_Recu[8] ;
Val_Heures[1]= SMS_Recu[9] ;
Val_Heures[2]= 0;
Minutes = (((SMS_Recu[12])-48)*10)+(((SMS_Recu[13])-48));
Val_Minutes[0]= SMS_Recu[12] ;
Val_Minutes[1]= SMS_Recu[13] ;
Val_Minutes[2]= 0;
Secondes = (((SMS_Recu[16])-48)*10)+(((SMS_Recu[17])-48)) ;
Val_Secondes[0]= SMS_Recu[16] ;
Val_Secondes[1]= SMS_Recu[17] ;
Val_Secondes[2]= 0;
if (Lancement == 1)
{
reponse_a_envoyer = 9;
}
else if ( (Heures>99) || (Minutes>59) || (Secondes>59) )
{
reponse_a_envoyer = 97;
}
else
{
Chrono = (Heures*3600)+(Minutes*60)+Secondes ;
Demande_Lancement = 1;
reponse_a_envoyer = 1;
}
}
//----------------- On recoit "OUI" ---------------------------
else if ( ((SMS_Recu[0]=='O')||(SMS_Recu[0]=='o')) && ((SMS_Recu[1]=='U')||(SMS_Recu[1]=='u')) && ((SMS_Recu[2]=='I')||(SMS_Recu[2]=='i')) )
{
if ( (Demande_Lancement==1) || (Demande_Lancement_Reveil ==1 ) )
{
Demande_Lancement = 0;
Demande_Lancement_Reveil = 0;
Lancement = 1;
reponse_a_envoyer = 2;
}
else
{
reponse_a_envoyer = 98;
}
}
//------------------ On recoit "NON" -----------------------------
else if ( ((SMS_Recu[0]=='N')||(SMS_Recu[0]=='n')) && ((SMS_Recu[1]=='o')||(SMS_Recu[1]=='O')) && ((SMS_Recu[2]=='N')||(SMS_Recu[2]=='n')) )
{
if ((Demande_Lancement==1) || (Demande_Lancement_Reveil ==1 ))
{
Demande_Lancement = 0;
Demande_Lancement_Reveil = 0;
reponse_a_envoyer = 3;
}
else
{
reponse_a_envoyer = 98;
}
}
//------------------- On recoit "ETAT" ---------------------------
else if ( ((SMS_Recu[0]=='E')||(SMS_Recu[0]=='e')) && ((SMS_Recu[1]=='T')||(SMS_Recu[1]=='t')) && ((SMS_Recu[2]=='A')||(SMS_Recu[2]=='a')) )
{
// On calcul le temps restant du chrono
ByteToStr( (Chrono/86400), Val_Jours_restant);
ByteToStr( (Chrono/3600), Val_Heures_restant);
ByteToStr( ((Chrono%3600)/60), Val_Minutes_restant);
ByteToStr( ((Chrono%3600)%60), Val_Secondes_restant);
// On demande la qualite du reseau
UART1_Write_Text("AT+CSQ");
UART1_Write(13);
delay_ms(100);
attente(); // On attend pour enregistré la valeur
Signal = 100 - ((((Val_Signal[0]-48)*10) + ((Val_Signal[1]-48)))*2);
ShortToStr(Signal, Val_Signal);
reponse_a_envoyer = 4;
}
//------------------- On recoit "STOP" ---------------------------
else if ( ((SMS_Recu[0]=='S')||(SMS_Recu[0]=='s')) && ((SMS_Recu[1]=='T')||(SMS_Recu[1]=='t')) && ((SMS_Recu[2]=='O')||(SMS_Recu[2]=='o')) )
{
if (Lancement)
{
Lancement = 0; // RAZ du flag
TMR0IE_bit = 0; // Arret du TIMER0
Chrono = 0; // RAZ de la Valeur du Chrono
reponse_a_envoyer = 5;
}
else
{
reponse_a_envoyer = 98;
}
}
//------------------- On recoit "AIDE" ---------------------------
else if ( ((SMS_Recu[0]=='A')||(SMS_Recu[0]=='a')) && ((SMS_Recu[1]=='I')||(SMS_Recu[1]=='i')) && ((SMS_Recu[2]=='D')||(SMS_Recu[2]=='d')) )
{
reponse_a_envoyer = 6;
}
//----------------- On recoit "REVEIL" ---------------------------
else if ( ((SMS_Recu[0]=='R')||(SMS_Recu[0]=='r')) && ((SMS_Recu[1]=='E')||(SMS_Recu[1]=='e')) && ((SMS_Recu[2]=='V')||(SMS_Recu[2]=='v')) )
{
// remplissage des structures
ts1.ss = (((Gdh[15])-48)*10)+(((Gdh[16])-48));
ts1.mn = (((Gdh[12])-48)*10)+(((Gdh[13])-48));
ts1.hh = (((Gdh[9])-48)*10)+(((Gdh[10])-48));
ts1.md = (((Gdh[6])-48)*10)+(((Gdh[7])-48));
ts1.mo = (((Gdh[3])-48)*10)+(((Gdh[4])-48));
ts1.yy = 2000 + ((((Gdh[0])-48)*10)+(((Gdh[1])-48))) ;
ts2.ss = (((SMS_Recu[22])-48)*10)+(((SMS_Recu[23])-48)) ;
ts2.mn = (((SMS_Recu[19])-48)*10)+(((SMS_Recu[20])-48)) ;
ts2.hh = (((SMS_Recu[16])-48)*10)+(((SMS_Recu[17])-48)) ;
ts2.md = (((SMS_Recu[7])-48)*10)+(((SMS_Recu[8])-48)) ;
ts2.mo = (((SMS_Recu[10])-48)*10)+(((SMS_Recu[11])-48)) ;
ts2.yy = 2000 + ((((SMS_Recu[13])-48)*10)+(((SMS_Recu[14])-48))) ;
// calcul du temps
epoch1 =Time_dateToEpoch(&ts1) ;
epoch2 = Time_dateToEpoch(&ts2) ;
diff = epoch2 - epoch1 ;
if (Lancement == 1) // Si le Chrono est déjà lancé
reponse_a_envoyer = 9;
else if ( epoch2 <= epoch1) // Le reveil est inferieur à la date actuelle
reponse_a_envoyer = 10;
else if ( diff > 604800) // Le reveil est supérieur à une semaine
reponse_a_envoyer = 11;
else
{
Chrono = diff ;
Demande_Lancement_Reveil = 1;
attente();
reponse_a_envoyer = 7;
}
}
//----------------- On recoit "TEST" ---------------------------
else if ( ((SMS_Recu[0]=='T')||(SMS_Recu[0]=='t')) && ((SMS_Recu[1]=='E')||(SMS_Recu[1]=='e')) && ((SMS_Recu[2]=='S')||(SMS_Recu[2]=='s')) )
{
UART1_Write_Text("AT+CCLK?");
UART1_Write(13);
attente();
reponse_a_envoyer = 8;
}
//----------------- On recoit un mot inexistant ---------------------------
else
{
reponse_a_envoyer = 99;
}
Composition(); // On compose le numéro
}
if (Fleche) // Jattends pour envoyer le message
{
Fleche = 0;
switch (reponse_a_envoyer){ // Suivant la question posée j'affiche la réponse adéquate
case 1:{
UART1_Write_Text("Valeurs recues:\r\n");
UART1_Write_Text("h : ");
UART1_Write_Text(Val_Minutes);
UART1_Write_Text("m : ");
UART1_Write_Text(Val_Secondes);
UART1_Write_Text("s\r\n\r\n");
UART1_Write_Text("Voulez-vous le lancer ?");
break;
}
case 2:{
TMR0IE_bit = 1; // On lance le chrono
UART1_Write_Text("Le chrono est lancé !");
break;
}
case 3:{
UART1_Write_Text("Abandon de l'initialisation");
break;
}
case 4:{
UART1_Write_Text("Etat du module:\r\n");
UART1_Write_Text("Date: "); // On écrit la date
UART1_Write(Gdh[6]);
UART1_Write(Gdh[7]);
UART1_Write_Text("/");
UART1_Write(Gdh[3]);
UART1_Write(Gdh[4]);
UART1_Write_Text("/");
UART1_Write(Gdh[0]);
UART1_Write(Gdh[1]);
UART1_Write_Text("\r\n");
UART1_Write_Text("Heure: "); // On écrit l'heure
for (i=9;i<17;i++)
{
if ( (Gdh[i]<58) && Gdh[i]>47 )
UART1_Write(Gdh[i]);
else
UART1_Write_Text(":");
}
UART1_Write_Text("\r\n");
UART1_Write_Text("Force du signal :"); // On écrit la force du signal
UART1_Write_Text(Val_Signal);
UART1_Write_Text("%\r\n");
if (Lancement==1) // Le temps qu'il reste
{
UART1_Write_Text("Lancé : OUI\r\n");
UART1_Write_Text("Temps restant :\r\n");
if ( Jours_restant != 0)
{
UART1_Write_text(Val_Jours_restant);
UART1_Write_Text("j");
}
UART1_Write_Text(Val_Heures_restant);
UART1_Write_Text("h");
UART1_Write_Text(Val_Minutes_restant);
UART1_Write_Text("m");
UART1_Write_Text(Val_Secondes_restant);
UART1_Write_Text("s");
}
else
{
UART1_Write_Text("Lancé : NON");
}
break;
}
case 5:{
UART1_Write_Text("Arret du chrono");
break;
}
case 6:{
UART1_Write_Text("Les mots clés:\r\nStop: pour arreter le chrono\r\nOui: pour lancer le chrono\r\nNon: pour annuler une demande\r\nEtat: pour connaitre les valeurs\r\nChrono Hxx Mxx Sxx: initialise le chrono\r\nReveil jj/mm/aa hh/mm/ss: mode reveil");
break;
}
case 7:{
UART1_Write_Text("Réveil reglé\r\n");
UART1_Write_Text("le : "); // écrit la date du reveil
UART1_Write(SMS_Recu[13]);
UART1_Write(SMS_Recu[14]);
UART1_Write_Text("\/");
UART1_Write(SMS_Recu[10]);
UART1_Write(SMS_Recu[11]);
UART1_Write_Text("\/");
UART1_Write(SMS_Recu[7]);
UART1_Write(SMS_Recu[8]);
UART1_Write_Text("\r\n");
UART1_Write_Text("a : "); // écrit l'heure du reveil
for (i=16;i<24;i++)
{
UART1_Write(SMS_Recu[i]);
}
i=0;
UART1_Write_Text("\r\n\r\n");
UART1_Write_Text("Voulez-vous le lancer ?");
break;
}
case 8:{
UART1_Write_Text("Test\r\n");
Gdh[8]=',';
UART1_Write_Text(Gdh);
break;
}
case 9:{
UART1_Write_Text("Le Chrono est déja lancé.\r\n");
UART1_Write_Text("Utilisez le mot \"STOP\" pour l'arreter");
break;
}
case 10:{
UART1_Write_Text("La Valeur du réveil est anterieur a l\'heure actuelle");
break;
}
case 11:{
UART1_Write_Text("La date reveil est supérieur a une semaine");
break;
}
case 96:{
UART1_Write_Text("Test");
break;
}
case 97:{
UART1_Write_Text("Erreur, les valeurs ne sont pas correctes\r\nHeures<100\r\nMinutes<60\r\nsecondes<60");
break;
}
case 98:{
UART1_Write_Text("Erreur, ce mot ne convient pas ici !");
break;
}
case 99:{
UART1_Write_Text("Erreur, mot inconnu!.");
break;
}
}
UART1_Write(13);
UART1_Write(10);
UART1_Write(0x1A); // Envoi cu CTRL+Z pour envoyer le message
delay_ms(500);
attente();
RAZ_SMS_Recu(); // On efface le buffer du SMS recu
attente();
}
//--------------- Fin du Chrono ------------------------------
if (( Fin_Chrono) && (Lancement) )
{
Fin_Chrono = 0;
Lancement = 0;
Chrono = 0;
TMR0IE_bit = 0;
for (i=0;i<=5;i++){
Sound_Play(2000, 300); // On joue un son
delay_ms(50);
}
Composition(); // Envoi u nmessage pour dire que c'est fini
UART1_Write_Text("Le Chrono est fini");
UART1_Write(13);
UART1_Write(10);
UART1_Write(0x1A); // Envoi cu CTRL+Z pour envoyer le message
attente();
}
if (Erreur) // Si flag Erreur levé
{
Erreur = 0; // RAZ du flag
i=0;
while(Ok==0) // Ici on envoie la commande "AT" tant que le Flag "Ok" n'est pas levé
{
i++;
UART1_Write_Text("AT");
UART1_Write(13);
delay_ms(1000);
if (i==5) // RAZ des variables et flag
{
Valeur = SMS_enregistre = Chrono = CMTI = temp = Fleche = reponse_a_envoyer = 0;
Demande_Lancement = Lancement = Demande_Lancement_reveil = 0 ;
}
if (i>10)
asm reset;
}
i = 0;
Ok = 0; // RAZ flag "Ok"
}
}
}
@Paul : tu m'avais parlé de mettre le texte en dur je crois dans un autre post . Mais j'ai quand même pas mal de texte, crois que que ca vaille le coup ? quelle est serait les bénéfices ? vitesse , mémoire .
Module GSM2-Click
- paulfjujo
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonjour Jeremy,
Definir du texte directement dans le code , c'est le mettre en RAM..
Probleme latent :
c'est surtout vrai pour les "petits" MCU. , si on travaille vers les 95% de taille RAM occupée.
Tu en es où en taille RAM et ROM occupées ?
Je crois que j'ai cramé mon module GSM2-click Quecktel M95 ..
en le connectant décalé d'une pin vers le bas sur le support MikroBus !
+5V sur le 0V et +3,3 sur le 0V ?
suite à de multiples manip avec ma carte SIM et mon Tracker GSM/GPGRS/GPS..
utilisant cette meme carte SIM.
je ne recois plus aucun SMS sur mon Phone , par contre je peux toujours en recevoir (coté PIC) !
A moins que mes manip avec des serverudrGPS Trace m'aient bloqué quelque chose ..
+CMS ERROR: 69 .. qui ne signifie pas grand chose !
tu m'avais parlé de mettre le texte en dur je crois dans un autre post . Mais j'ai quand même pas mal de texte, crois que que ca vaille le coup ? quelle est serait les bénéfices ? vitesse , mémoire .
Definir du texte directement dans le code , c'est le mettre en RAM..
Probleme latent :
c'est surtout vrai pour les "petits" MCU. , si on travaille vers les 95% de taille RAM occupée.
Tu en es où en taille RAM et ROM occupées ?
Je crois que j'ai cramé mon module GSM2-click Quecktel M95 ..
en le connectant décalé d'une pin vers le bas sur le support MikroBus !
+5V sur le 0V et +3,3 sur le 0V ?
suite à de multiples manip avec ma carte SIM et mon Tracker GSM/GPGRS/GPS..
utilisant cette meme carte SIM.
je ne recois plus aucun SMS sur mon Phone , par contre je peux toujours en recevoir (coté PIC) !
A moins que mes manip avec des serverudrGPS Trace m'aient bloqué quelque chose ..
+CMS ERROR: 69 .. qui ne signifie pas grand chose !
Code : Tout sélectionner
3 EA1= 1; EA2 Now= 77;TempF= 25.54deg ; No MCP23017;BP1=1; BP2=1; LD1=0; LD2=0;Dialog=1; SOM=0; STAT=1; DTR=0
Read message NON LUS (AT+CMGL="REC UNREAD")
+CMTI: "SM",1
+CMGL: 1,"REC UNREAD","+33621xxxxxx","","2016/09/19 18:36:25+08"
Help
OK
Help demandée
Contenu du SMS à envoyer
Cdes dispo:
Data On demand
Survey On (ou Off)
Sommeil
Cde Led1 0n (ou Off)
MAH=15/09/29,16:45:00+04
MCP1=00000000
Compose Numero (AT+CMGS="+3362xxxxxxx"
> Pret pour envoi Msg txt
+CMS ERROR: 69
Efface tous les SMS reçus (AT+QMGDA="DEL INBOX")
OK
Module GSM2-Click
- paulfjujo
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonsoir à tous,
@jeremy
pourrais_tu tester cette commande quectel
Le parametre 12 me donne un code fournisseur inconnu du bataillon..
J'ai testé le module connecté sur le Clicker PIC, en mode Debug,
En principe j'utilise "orange"
L'UART1 prend alors les commandes , des recpetion d'un SMS "Debug ON"
et j'utilise alors Qnavigator de Quectel pour tester les cdes AT
La plupart des commandes reagissent bien
sauf la lecture de l'etat carte SIM ?
@jeremy
pourrais_tu tester cette commande quectel
Code : Tout sélectionner
D:\__PIC_MCU\_MikroE_Docus\_GSM2_Click\QCOM_V1.0.exe
Test avec QNAVIGATOR
D:\_QNavigatorV1.5\Qnavigator.exe
AT+CPOL?
Mode Debug <Exit> pour en sortir =1 Cde=AT+CPOL?
AT+CPOL?
+CPOL: 1,2,"20801" // Orange France
+CPOL: 2,2,"20802" // Orange France
+CPOL: 3,2,"21404" // Xfera Moviles SPAIN
+CPOL: 4,2,"20610" // mobystar Belgium
+CPOL: 5,2,"22201" // Telecom Italia Mobile
+CPOL: 6,2,"22288" // WIND Italy
+CPOL: 7,2,"26803" // Optimus (Sonaecom) Portugal
+CPOL: 8,2,"26201" // D1 (T-Mobile) Germany
+CPOL: 9,2,"60401" // Maroc Telecom (Itissalat Al-Maghrib) Moroco
+CPOL: 10,2,"22801" // Swisscom Mobile Switzerland
+CPOL: 11,2,"60303" // Wataniya Telecom (Nedjma) Algeria
+CPOL: 12,2,"310410" // ???
Le parametre 12 me donne un code fournisseur inconnu du bataillon..
J'ai testé le module connecté sur le Clicker PIC, en mode Debug,
En principe j'utilise "orange"
Code : Tout sélectionner
AT+COPS?
+COPS: 0,0,"Orange F"
OK
AT+COPS=1,2,"20801"
Mode Debug <Exit> pour en sortir =1 Cde=AT+COPS=1,2,"20801"
AT+COPS=1,2,"20801"
OK
Mode Debug <Exit> pour en sortir =1 Cde=AT+COPS?
AT+COPS?
+COPS: 1,2,"20801"
OK
L'UART1 prend alors les commandes , des recpetion d'un SMS "Debug ON"
et j'utilise alors Qnavigator de Quectel pour tester les cdes AT
La plupart des commandes reagissent bien
sauf la lecture de l'etat carte SIM ?
AT+QSIMSTAT?
Mode Debug <Exit> pour en sortir =1 Cde= ?? ??
AT+QSIMSTAT?
+CME ERROR: 100
mais celle ci est Ok
AT+QSIMVOL?
Mode Debug <Exit> pour en sortir =1 Cde=AT+QSIMVOL?
AT+QSIMVOL?
+QSIMVOL:0 Recognize 1.8V and 3.0V SIM card (Default)
OK
et envoi de SMS ..
Compose Numero (AT+CMGS="+336xxxxxxx5"
> Pret pour envoi Msg txt
+CMS ERROR: 69
Module GSM2-Click
Module GSM2-Click
Module GSM2-Click
- paulfjujo
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonjour Jeremy, et à Tous,
Merci de te pencher sur mon probleme ..
Curieux , dans ta liste de "fournisseurs" il n'y en a aucun Francais ?
lien sur
Network Codes List
le code "France" commence par 208 ...
ex:
Spain 21403 France Telecom Espana, S.a (Amena)
Italy 22201 Telecom Italia Mobile
et ta cde "+COPS?" qui donne simplement 0 ?
alors que ma cde AT+COPS? donne
+COPS: 0,0,"Orange F"
OK
Je vais retester le module GSM2 en dehors du MikroBus Clicker PIC avec Qnavigator ...
car à cet instant precis ,je ne sais pas si c'est
-le module GSM2 qui est partielement HS
-ou ma carte SIM
- ou des E/S du PIC clicker
dommage qu'il n'y ait pas de detromper sur ces cartes Click...
avec moi-meme .. La galère ..
de plus je ne peux pas tester ma carte SIM seule , je n'ai aucun autre telephone debloqué ..(libre de fournisseur)
à moins que mon Tracker GSM/GPRS/GPS puisse s'activer...
j'ai chargé pour celà " GpsGate Server" sur mon PC .. à suivre
Merci de te pencher sur mon probleme ..
Curieux , dans ta liste de "fournisseurs" il n'y en a aucun Francais ?
lien sur
Network Codes List
le code "France" commence par 208 ...
ex:
Spain 21403 France Telecom Espana, S.a (Amena)
Italy 22201 Telecom Italia Mobile
et ta cde "+COPS?" qui donne simplement 0 ?
alors que ma cde AT+COPS? donne
+COPS: 0,0,"Orange F"
OK
Je vais retester le module GSM2 en dehors du MikroBus Clicker PIC avec Qnavigator ...
car à cet instant precis ,je ne sais pas si c'est
-le module GSM2 qui est partielement HS
-ou ma carte SIM
- ou des E/S du PIC clicker
dommage qu'il n'y ait pas de detromper sur ces cartes Click...
avec moi-meme .. La galère ..
de plus je ne peux pas tester ma carte SIM seule , je n'ai aucun autre telephone debloqué ..(libre de fournisseur)
à moins que mon Tracker GSM/GPRS/GPS puisse s'activer...
j'ai chargé pour celà " GpsGate Server" sur mon PC .. à suivre
Module GSM2-Click
- paulfjujo
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
Impossible d'envoyer un SMS soit à partie du module QUECTEL95 soit de mon Tracker GPS
je pense que le probleme est du coté de la carte SIM
j'ai vu qu'il existait une commande pour bloquer lessorties SMS
testé sans succes ...
=> je commande une autre carte SIM pour 10 roros !
Diviser pour mieux regner !
A suivre...
je pense que le probleme est du coté de la carte SIM
j'ai vu qu'il existait une commande pour bloquer lessorties SMS
testé sans succes ...
=> je commande une autre carte SIM pour 10 roros !
Diviser pour mieux regner !
A suivre...
Module GSM2-Click
- paulfjujo
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
Bonsoir,
Apres avoir reçu une autre carte SIM ...
test GSM2-click .. idem
je recois des SMS ,mais ne peut en envoyer
Mon Tracker 102 ne repond pas non plus à une commande quelconque .. telle que begin123456
bien qu'il clignote à 4sec => GPRS et GPS OK
I faut dire que j'ai mené mes test en parallele , entre le GSM2-click et mon tracker GPS TK-102
(AVEC LA MEME CARTE SIM !)
J'ai testé toutes les E/S du PIC , en relation avec la carte GSM2 -> tout est OK
Au cous de mes perigrinations à ce sujet, cette phrase, issue d'u forum GPS Trace Orange m'a mis la puce à l'oreille :
J''ai donc remis ma carte SIM sur le GSM2 , acrtivé le mode debug ( par envoi SMS "Debug On")
recu par le GSM2 et aigguille alors, l'UART1 sur le GSM2 via l'UART2
comme si le GSM2 etait directement relié au terminal..
coté Terminal : usage de QNAVIGATOR (de Quectel) que je recommande vivement !
et envoi de commande famille TCPIP ... ect..
et store en profil 0.
Je sort du mode debug en envoyant "Exit" via le clavier terminal
et retombe alors sur la config PIC <-> UART2 <--> GSM2
j'envoi un SMS "Cde Led1 On"
et miracle ,il agit, allume la led et repond en envoyant le SMS "Etat Led1=1 Led2=0"
C'EST OK !
Tout est rentré dans l'ordre !
Entre temps un Ticket envoyé à MikroE, me confirmait qu'il y avait peu de chance (ou malheur)
que ma carte GSM2 soit H.S.
La morale de cette histoire serait:
- N'utilise pas la meme carte SIM pour plusieur application
- fait gaffe à 2 fois , avant d'installer un module Click sur un mikroBus ... meme sidans mon cas , cela n'a pas eu d'incidence
Apres avoir reçu une autre carte SIM ...
test GSM2-click .. idem
je recois des SMS ,mais ne peut en envoyer
Code : Tout sélectionner
Compose Numero (AT+CMGS=AT+CMGS="+33621517346"<CR><LF>
AT+CMGS="+<CR><LF>
Pret pour envoi Msg txt <CR><LF>
Essai envoi SMS depuis GSM2
>
+CMS ERROR: 69<CR><LF>
Erreur sur envoi SMS <CR><LF>
<CR><LF>
Mon Tracker 102 ne repond pas non plus à une commande quelconque .. telle que begin123456
bien qu'il clignote à 4sec => GPRS et GPS OK
I faut dire que j'ai mené mes test en parallele , entre le GSM2-click et mon tracker GPS TK-102
(AVEC LA MEME CARTE SIM !)
J'ai testé toutes les E/S du PIC , en relation avec la carte GSM2 -> tout est OK
Au cous de mes perigrinations à ce sujet, cette phrase, issue d'u forum GPS Trace Orange m'a mis la puce à l'oreille :
Please make sure that you your SIM-card number is not registered on another platform.
J''ai donc remis ma carte SIM sur le GSM2 , acrtivé le mode debug ( par envoi SMS "Debug On")
recu par le GSM2 et aigguille alors, l'UART1 sur le GSM2 via l'UART2
comme si le GSM2 etait directement relié au terminal..
coté Terminal : usage de QNAVIGATOR (de Quectel) que je recommande vivement !
et envoi de commande famille TCPIP ... ect..
et store en profil 0.
Je sort du mode debug en envoyant "Exit" via le clavier terminal
et retombe alors sur la config PIC <-> UART2 <--> GSM2
j'envoi un SMS "Cde Led1 On"
et miracle ,il agit, allume la led et repond en envoyant le SMS "Etat Led1=1 Led2=0"
C'EST OK !
Code : Tout sélectionner
9 EA1= 135; EA2 Now= 74;TempF= 23.85deg ; No MCP23017;BP1=1; BP2=1; LD1=0; LD2=0;Dialog=0; SOM=0; STAT=1; DTR=0
10 EA1= 134; EA2 Now= 74;TempF= 23.85deg ; No MCP23017;BP1=1; BP2=1; LD1=0; LD2=0;Dialog=0; SOM=0; STAT=1; DTR=0
Read message NON LUS (AT+CMGL="REC UNREAD")
+CMTI: "SM",2
AT+CMGL="REC UNREAD"
+CMGL: 2,"REC UNREAD","+33621517346","","2016/10/04 19:17:20+08"
Cde Led1 On
OK
Retour d'ordre cde Leds
Contenu du SMS à envoyer
Retour Led1=1 Led2=0
Compose Numero AT+CMGS="+33621517346"
Pret pour envoi Msg Tx
>
Retour Led1=1 Led2=0
>
+CMGS: 56
OK
Envoi SMS OK :
Efface tous les SMS reçus (AT+QMGDA="DEL INBOX")
AT+QMGDA="DEL INBOX"
OK
11 EA1= 135; EA2 Now= 74;TempF= 23.85deg ; No MCP23017;BP1=1; BP2=1; LD1=1; LD2=0;Dialog=0; SOM=0; STAT=1; DTR=0
12 EA1= 135; EA2 Now= 74;TempF= 23.85deg ; No MCP23017;BP1=1; BP2=1; LD1=1; LD2=0;Dialog=0; SOM=0; STAT=1; DTR=0
Tout est rentré dans l'ordre !
Entre temps un Ticket envoyé à MikroE, me confirmait qu'il y avait peu de chance (ou malheur)
que ma carte GSM2 soit H.S.
La morale de cette histoire serait:
- N'utilise pas la meme carte SIM pour plusieur application
- fait gaffe à 2 fois , avant d'installer un module Click sur un mikroBus ... meme sidans mon cas , cela n'a pas eu d'incidence
Modifié en dernier par paulfjujo le mer. 5 oct. 2016 20:31, modifié 1 fois.
Module GSM2-Click
-
Jérémy
Administrateur du site- Messages : 2725
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Merci pour ce retour d'expérience fort utile !
Je n'ai pas recommencé mes tests encore ( je profite de ma petite famille) mais ça ne serait tarder !
En tout état de cause, aux dernières nouvelles le programme fonctionnait parfaitement, me restait plus qu'a l'optimiser.
J'aimerais trouvé aussi une astuce pour redémarrer si jamais il plante !
Je n'ai pas recommencé mes tests encore ( je profite de ma petite famille) mais ça ne serait tarder !
En tout état de cause, aux dernières nouvelles le programme fonctionnait parfaitement, me restait plus qu'a l'optimiser.
J'aimerais trouvé aussi une astuce pour redémarrer si jamais il plante !
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 41 invités