Go Down

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

matth122

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


bigben99


matth122

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

Code: [Select]

 
#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

bigben99

http://elecfreaks.com/store/download/datasheet/rf/SIM900/SIM900_AT%20Command%20Manual_V1.03.pdf

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=<n>
- 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 ?

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

Artouste

#5
Apr 15, 2015, 07:39 pm Last Edit: Apr 15, 2015, 07:49 pm by Artouste
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 :
Code: [Select]
SIM900.println("AT+COLP=1"); // configure COLP à 1




matth122

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 ?





Artouste

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

matth122

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  ?

Artouste

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

bigben99

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 ?

matth122

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é

bigben99

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 :
Code: [Select]

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.

matth122

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

bigben99

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

Go Up