Go Down

Topic: Comment lire la réponse d'une commande AT ? (Read 4391 times) previous topic - next topic

matth122

Non en fait je reçois rien du tout si je rajoute la ligne seule
Il faut rajouter des bout de code pour écouter la réponse et l'afficher
J'ai trouve quelques informations mais quand je met le code ça m'affiche ok sans même avoir composer le numéro !

bigben99

Si tu reçois des informations mais tu ne les lis pas, ça n'est pas tout à fait la même chose.

Peux-tu donner ton code complet avec la partie lecture de la réponse à la commande ?

infobarquee

bonjour,
je crois qu'il faudrait que tu prenne la doc du sim900 et surtout des commandes AT.
tu auras tout dedans.
pour certaines commandes, la réponse est simplement OK, donc que veux tu de plus?

et surtout le code que tu rentre
AUCUNE AIDE PAR MP

bigben99

Avec les éléments fournis et mon intuition, je pense qu'il ne traite pas les réponses.

matth122

Le code est celui qui est sur la page 1 j'y ajoute la ligne COLP
La doc des commandes AT je lai lue mais je ne sais pas comment écrire le code pour interpréter la réponse du shield !

Artouste

Le code est celui qui est sur la page 1 j'y ajoute la ligne COLP
La doc des commandes AT je lai lue mais je ne sais pas comment écrire le code pour interpréter la réponse du shield !
bonjour
attention à une chose :
c'est normal que tu recoive un "OK" immediatement apres AT+COLP=1 , cela signifie simplement  que cette commande à été prise en compte.
ce qu'il faut que tu fasse c'est de verifier seulement apres la commande numertotion que tu recoive un "OK"

bigben99

Ok donc j'avais vu juste.

C'est bien d'envoyer des commandes AT à ton module via ton port série, mais peut-être faudrait-il lire les réponses que t'envoie ton module ?

un petit tour sur la documentation de Serial.read() devrait t'aider.

matth122


bigben99

Serial.read() c'est la méthode générique pour lire sur un port série... SIM900 c'est le nom que tu as donné à ta liaison série mais quelqu'un d'autre pourrait nommer sa liaison autrement.

Donc dans ton cas, c'est bien SIM900.read()

matth122

Ok je ferais des recherches sur serial.read et j'adapterais après.
 un bon weekend de recherche et d'apprentissage a l'horizon

matth122

Bonjour ,

Alors voila ou j'en suis
le code
Code: [Select]

#define DEBUG
#include <SoftwareSerial.h>
SoftwareSerial SIM900(2, 3); // configure software serial port


 void setup()
{
  Serial.begin(9600);
  Serial.println("debut du setup");
  SIM900.begin(2400);               
 // SIM900power(); 
  delay(30000);  // give time to log on to network.
  Serial.println("fin du timer");
 
   }

 
void SIM900power()
// software equivalent of pressing the GSM shield "power" button
{
  digitalWrite(8, HIGH);
  delay(1000);
  digitalWrite(8, LOW);
  delay(5000);
}
 
void callSomeone()
{   
   SIM900.println("AT+COLP=1"); // active colp
   SIM900.println("AT+COLP?"); // interroge le colp
   GetSIM900();
   Serial.println("debut appel");
   
   SIM900.println("ATD + +33XXXXXXXX;");
   delay(1000);
   SIM900.println();
   
  delay(20000);            // attente de 20 seconde...
  SIM900.println("ATH");   // raccroche

}
 
void loop()
{
  callSomeone(); // appel
 // SIM900power();   // power off GSM

do {} while (1); // do nothing
 }
 
 void GetSIM900()
{
  delay(2000);
 
  if(SIM900.available())
  {
    Serial.print("\n");
    delay(3000);
    while(SIM900.available())
    {
      Serial.print((char)SIM900.read()); // On vide la mémoire tampon du SIM900
    }
    Serial.print("\n");
  }
}


j'ai ajouté des notes pour savoir l'avancement du programme

et voila la lecture sur le moniteur serie

Code: [Select]

debut du setup
fin du timer

AT+COLP=1
AT+COLP?

OK

debut appel

ATD + +33XXXXXXXX;

+COLP: "++33XXXXXXXX",145,"",0,"" 

OK




sur la ligne +COLP: "++33XXXXXXXX",145,"",0,""   ne devrais-je pas avoir 1 quand je décroche ?

matth122

bon en fait le shield gsm semble envoyer les commandes sans qu'on lui demande
car avec le simple code
Code: [Select]

 
#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 3); // RX, TX

void setup()
{
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  mySerial.begin(2400);
 
  mySerial.println("ATD + +33XXXXXXXXX;");
  delay(1000);
   }

void loop() // run over and over
{
  if (mySerial.available())
    Serial.write(mySerial.read());
  if (Serial.available())
    mySerial.write(Serial.read());
}



j'obtiens ces informations dans le moniteur serie

Code: [Select]


+CLCC: 1,0,3,0,0,"++33XXXXXXXX",145,""  // appel lancé


+COLP: "++33XXXXXXXXX",145,"",0,""     // interogation du colp

+CLCC: 1,0,0,0,0,"++33XXXXXXXX",145,""  // valeur de retour au decroché du telephone appelé

OK


+CLCC: 1,0,6,0,0,"++33XXXXXXXX",145,""  //retour après avoir raccroché

NO CARRIER



maintenant je dois trouver comment interpréter la réponse pour lancer une action définie


Go Up