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

bonjour,

J'ai besoin pour mon projet de savoir l'ors d'un appel téléphonique avec module gsm, si le téléphone a l'autre bout à décroché
J'ai vu qu'il existait deux commande AT une +CLCC et l'autre +CPAS.
La CPAS me semblais plus simple puisque on attend en retour la valeur 4 qui est censée indiquer que l'autre partie à décroché.
Seulement voilà je ne trouve pas et aussi je ne comprend pas comment faire pour interpréter cette réponse affin quelle active une action définie,
J'ai essayé tout ce que j'ai pus trouver dans divers tutos mais rien ne fonctionne, soit ça active la fonction des que le téléphone sonne, soit il se passe rien.

Sachant que je ne peut utiliser que la librairie Softwareserial, une commande comme SIM900.read() me fait une erreurs de compilation

Ça fait une semaine que je rame et j'y arrive pas !

Merci à ceux qui pourrons m'aider j'en ai vraiment besoins

Ton code c'est à nous de le deviner ?

le code est tout simple, pour le moment c'est juste une ébauche qui me sert de test et d'aprentissage
ou j’intègre au fur et a mesure les commandes suivant mes besoins

#include <SoftwareSerial.h>
SoftwareSerial SIM900(2, 3); // softwareserial port
 
void setup()
{
  SIM900.begin(19200);               
  SIM900power();  
  delay(20000);  // temps pour se logger au reseau
}
 void SIM900power()
{
  digitalWrite(9, HIGH);
  delay(1000);
  digitalWrite(9, LOW);
  delay(5000);
}

void MakeCall()
{
  SIM900.println("ATD + +33XXXXXXXX;"); // lance l'appel
  delay(100);
  SIM900.println();
  delay(30000);            // delais de 30 seconde
  SIM900.println("ATH");   // puis racroche
}
 
void loop()
{
  MakeCall(); // appel
  //SIM900power();   
  do {} while (1); 
}

je cherche donc a intégrer dans ce code une demande type SIM900.println(AT +CPAS) dont la réponse exécutera une action, qui sera plus tard la lecture d'un MP3 via le shield sparfun

D'après la documentation ci-dessus, lorsque tu passes ta commande d'appel (ATD + +33xxxxx), cette dernière peut répondre OK :

  • soit immédiatement après la numérotation
  • soit une fois que la communication est établie

Le choix entre ces 2 modes se faisant par la commande AT+COLP=

  • 0 : retour juste après la numérotation
  • 1 : retour après que la communication soit établie

La solution la plus simple ne serait-elle pas de configurer AT+COLP=1 ?

je veux bien configurer AT+COLP=1 si je savais comment faire,

il est surtout la mon problème.

et je ne trouve pas d'exemple de tuto ou même un cour explicatif la dessus

matth122:
je veux bien configurer AT+COLP=1 si je savais comment faire,

il est surtout la mon problème.

et je ne trouve pas d'exemple de tuto ou même un cour explicatif la dessus

bonsoir

c'est de la commande AT basique , identique a ce que tu utilise pour numeroter (ATD+)

ça doit prendre la forme d'une ligne dans ton code apres mise en route du module sim900
du genre :

SIM900.println("AT+COLP=1"); // configure COLP à 1

avec cette ligne "SIM900.println("AT+COLP=1"); // configure COLP à 1" , on interoge le module GSM ou on le force a 1 ?

de ce que je pense avoir un peut compris de la commande AT

on envoie une requête: SIM900.printnl("AT+COLP?");

on attend la reponse la je sèche

on traite la reponse : if(SiM900.printnl(AT+COLP?", " 1", 1000)) == 1 ) {
digitalwrite( led13, high) } // exemple

je suis sur le bon chemin ou j'ai tout faux ?

matth122:
avec cette ligne "SIM900.println("AT+COLP=1"); // configure COLP à 1" , on interoge le module GSM ou on le force a 1 ?

...

je suis sur le bon chemin ou j'ai tout faux ?

Sous toutes reserves (je me base sur la doc,) je n'ai pas de SIM900
tu force la config COLP à 1 , sans te préoccuper de son etat precedent
il est inutile de connaitre l'etat anterieur dans la mesure où tu veux imposer COLP à 1

si je force a 1 le COLP j'obtiendrais quand même l'information de savoir si une personne a décroche le téléphone ?

Je me suis basé sur la reponse de bigben99 de 16H51 --->relire :sunglasses:

Je n'ai pas de module SIM900, donc je me base uniquement sur la doc également, mais toi qui a un module, tu pourrais peut-être tester ? et ensuite nous donner le résultat ?

Si vous me fournissez des sketch je veux bien tester tout ce que vous voulez !
Mais la ligne AT+colp=1 je la met pas juste comme ça dans le sketch et il lui faut un retour pour exécuter une action par exemple mettre a 1 la sortie 13 ça permet de visualiser si le téléphone a été décroché

pour le sketch je ne pourrais pas te l'écrire, je n'ai aucun moyen de vérifier un minimum ce que je ferais.

Mais si tu fais :

SIM900.println("AT+COLP=1");
SIM900.println("ATD + +33xxx");

Si je comprends bien la documentation, tu devrais avoir un OK en retour de ton ATD uniquement lorsque ton correspondant aura décroché.
Mais encore une fois, ce n'est que du théorique, il faut que tu testes.

Comme je m'y attendais mettre seulement SIM900.println("AT+COLP=1"); na absolument aucun effet.

j'essaie différent code trouvé ici et la mais sans vraiment comprendre ce que je fais,
bref j'arrive a rien

Tu reçois toujours le retour "OK" immédiatement ?

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 !

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 ?

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

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

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 !