SIM900 GSM/GPRS pas à obtenir un bon AT+CREG? réponse
Je suis en utilisant un Arduino UNO avec joint IComsat SIM900 GSM/GPRS shield.
En utilisant le tutoriel suivant: Arduino Live Tracker GPS je suis coincé avec l'AT+CREG? commande, qui vérifie si la carte SIM est enregistré chez le fournisseur.
La logique suivante est utilisée:
Dans le GSM_HTTP.INO fichier dans le "void setup ()", la ligne suivante est exécutée modem.checkNetwork();
void setup() {
Serial.begin(9600);
Serial.println("GM862 monitor");
modem.switchOn(); //switch the modem on
delay(4000); //wait for the modem to boot
modem.init(); //initialize the GSM part of Module
modem.version(); //request modem version info
while (!modem.isRegistered()) {
delay(1000);
modem.checkNetwork(); //check the network availability
}
}
La fonction "checkNetwork()" fait partie de la bibliothèque incluse GSM862.cpp et ressemble à ceci:
void GM862::checkNetwork() {
char buf[BUF_LENGTH];
char result;
requestModem("AT+CREG?", 1000, true, buf);
result = buf[21];
if (result == '1') {
state |= STATE_REGISTERED;
}
else {
state &= ~STATE_REGISTERED;
}
}
Maintenant, c'est la partie importante: La valeur de "résultat" qui obtient reçu par la fonction "requestModem" renvoie cryptique de valeurs, mais pas netword statut (nombre de 0 à 5) qui est pourquoi il est une boucle sans fin en essayant de s'inscrire sans erreur ou un message de réussite.
Que cette fonction obtient le "buf" variable de la fonction "requestModem" GSM862.cpp j'ai eu un coup d'oeil:
byte GM862::requestModem(const char *command, uint16_t timeout, boolean check, char *buf) {
byte count = 0;
*buf = 0;
modem->flush();
modem->println(command);
count = getsTimeout(buf, timeout);
return count;
}
Afin d'avoir un regard sur les variables pertinentes à des fins de débogage, j'ai changé les deux dernières fonctions dans le code suivant:
-->checkNetwork
void GSM862::checkNetwork() {
char buf[BUF_LENGTH];
char result;
requestModem("AT+CREG?", 1000, true, buf);
result = buf[21];
Serial.print("Debugging buf2:");
Serial.print(buf[21]);
Serial.print("Debugging buf2:");
Serial.print(buf[1]);
Serial.print("Debugging buf2:");
Serial.print(buf[0]);
Serial.print("Debugging result2:");
Serial.println(result);
if (result == '1') {
state |= STATE_REGISTERED;
Serial.println("Network registered, home network...");
}
else {
state &= ~STATE_REGISTERED;
if(result == '0'){
Serial.println("Network not registered, not searching for a new operator to register to...");
}
if(result == '2'){
Serial.println("Still searching for an operators network to register to...");
}
if(result == '3'){
Serial.println("Network registration denied...");
}
if(result == '4'){
Serial.println("Network registration state unknown, probably still starting up...");
}
if(result == '5'){
Serial.println("Network registered, roaming...");
}
}
}
--> demande de Modem
byte GSM862::requestModem(const char *command, uint16_t timeout, boolean check, char *buf) {
byte count = 0;
*buf = 0;
modem->flush();
modem->println(command);
count = getsTimeout(buf, timeout);
Serial.print("Debugging command1:");
Serial.println(command);
Serial.print("Debugging count1:");
Serial.println(count);
Serial.print("Debugging buf1:");
Serial.println(buf);
Serial.print("Debugging timeout1:");
Serial.println(timeout);
return count;
}
Comme je l'ai mentionné ci-dessus, il semble que la valeur de "résultat" de la fonction "checkNetwork" qui est en fait la valeur de "buf[21]", affiche une énigme de valeur lorsqu'elles sont affichées sur le terminal via un port Série.println();
Avez-vous une idée de pourquoi ou le problème?
OriginalL'auteur Daniel | 2013-07-09
Vous devez vous connecter pour publier un commentaire.
D'enregistrement de réseau d'information (CREG) de sortie dépend de la configuration du modem.
les informations de localisation (location area code et ID de cellule)
Options 2. et 3. sera également automatiquement émettent +CREG messages au modem d'amorçage/de modification de réseau.
ps: il ne faut pas oublier de sauvegarder À la configuration par l'exécution de l'AT&W
plus de détails sur la CREG peut être trouvé dans "SIM900 À COMMANDE MANUELLE"
OriginalL'auteur FlegmatoidZoid