Comment lire la réponse d'une commande AT ?

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 !

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"

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.

C'est pas plutôt SIM900.read()?

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()

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

Bonjour ,

Alors voila ou j’en suis
le code

#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

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 ?

bon en fait le shield gsm semble envoyer les commandes sans qu’on lui demande
car avec le simple code

#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

+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