Pages: [1]   Go Down
Author Topic: probleme code  (Read 886 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Jr. Member
**
Karma: 0
Posts: 81
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

voila vous allez peut etre trouver ca simple mais je bloque un peu

alors je m explique jai deja un bout de programme:

Code:
int data;
int puissance;
int led = 13;
int onModulePin = 2;        // the pin to switch on the module (without press on button)

int x = 0;

void switchModule(){
    digitalWrite(onModulePin,HIGH);
    delay(2000);
    digitalWrite(onModulePin,LOW);
}

void setup(){

    Serial.begin(115200);                // UART baud rate
    delay(2000);
    pinMode(led, OUTPUT);
    pinMode(onModulePin, OUTPUT);
    switchModule();                    // switches the module ON

    for (int i=0;i< 5;i++){
        delay(5000);
    }
    Serial.println("AT+CPIN=1234");
    delay(8000);
    Serial.println("AT+CGSOCKCONT=1,\"IP\",\"orange.lu\"");
    Serial.flush();
  delay(1000); 
   
}

void loop()
{
Serial.print("AT+SIMEI?");
delay(200);

 data=0; 
 
    data=Serial.read();
  Serial.print(data);
 
 
  Serial.print("AT+CSQ");
delay(200);

puissance=Serial.read();
Serial.print(puissance);

    while(1);
}   


mais le probleme cest que j obtiens pas par exemple mon code imei comme souhaité avec la commande at+simei? mais une valeur genre 13 ou 15 (je sais plus ) j'aimerai recopier la chaine de caractere qui apparait comme réponse dans une variable appelé data  et la puissance du genre14.65 dans puissance

merci d avance
Logged

France
Offline Offline
Faraday Member
**
Karma: 36
Posts: 3442
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Code:
Serial.print("AT+SIMEI?");
delay(200);

 data=0; 
 
    data=Serial.read();
  Serial.print(data);

Je serais surpris que la commande AT+SIMEI? ne retourne qu'un seul caractère étant donné que le code IMEI est composé de 15 caractères.
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 81
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
char puissance[20];
int led = 13;
int onModulePin = 2;        // the pin to switch on the module (without press on button)

int x = 0;
char data[20];
void switchModule(){
    digitalWrite(onModulePin,HIGH);
    delay(2000);
    digitalWrite(onModulePin,LOW);
}

void setup(){

    Serial.begin(115200);                // UART baud rate
    delay(2000);
    pinMode(led, OUTPUT);
    pinMode(onModulePin, OUTPUT);
    switchModule();                    // switches the module ON

    for (int i=0;i< 5;i++){
        delay(5000);
    }
    Serial.println("AT+CPIN=1234");
    delay(8000);
    Serial.flush();
    Serial.println("AT+CGSOCKCONT=1,\"IP\",\"orange.lu\"");
    Serial.flush();
  delay(1000); 
   
}


void loop()
{
  Serial.flush();
Serial.println("AT+SIMEI?");

 x=0; 
  do{
        while(Serial.available()==0);
    data[x]=Serial.read();
     x++;
    }while(x < 19);
  Serial.println(data);
 
 
  Serial.println("AT+CSQ");
 x=0; 
  do{
        while(Serial.available()==0);
        puissance[x]=Serial.read();
        x++;
    }while(x < 19);
Serial.println(puissance);

    while(1);
}   


la je patauge je test des truc mais sans rien

car la j obtiens la réponse:



AT+CPIN=1234
AT+CGSOCKCONT=1,"IP","orange.lu"
AT+SIMEI?

START

+CPIN: S
AT+CSQ
IM PIN
AT+CPIN=123




cette reponse est la réponse de la commande at+cpin=1234 mais pourtant jai mis un serial.flush() apres pour vidé le buffer ...


je suis un peu perdu
Logged

France
Offline Offline
Faraday Member
**
Karma: 36
Posts: 3442
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Tu utilises quel IDE?
Parce qu'il y a cette remarque sur l'aide de la commande Flush()
Quote
Waits for the transmission of outgoing serial data to complete. (Prior to Arduino 1.0, this instead removed any buffered incoming serial data.)

Il semblerait qu'à partir de la 1.0 flush() se contente d'attendre la fin de l'émission.

Maintenant il me semble (il y a longtemps que je n'ai pas mis le nez dedans) que les commande AT retournent toujours un accusé de réception. Tu devrais peut être récupérer ces accusés de réception pour les visualiser et voir si toutes des commandes passent bien.
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 81
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

j utilise la 1.0

et je comprend pas pour ta question sur les accusés
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 81
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

quand je fais en manuel avec le serial monitor jai les commandes et les réponses je publie pour que vous voyez la forme des réponses



START

+CPIN: SIM PIN
at+cpin=1234

OK

+CPIN: READY

SMS DONE

PB DONE

AT+CGSOCKCONT=1,"IP","orange.lu"

OK
AT+SIMEI?

+SIMEI: 355843030295301

OK
AT+CSQ

+CSQ: 15,99

OK
Logged

France
Offline Offline
Faraday Member
**
Karma: 36
Posts: 3442
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
j utilise la 1.0
Donc déjà flush ne vide pas le tampon de réception.
Il faut donc que tu le vides par toi même en faisant des lectures.

Quote
et je comprend pas pour ta question sur les accusés
Ma question c'était juste d'afficher les réponses de ton module GSM pour voir si les commandes AT passaient bien et étaient bien comprises.
Ta recopie d'écran montre que les commandes passent bien donc tu as juste un problème de vidage du tampon de réception.
Il faudrait que tu supprimes les delay() que tu as mis après chaque émission de commande et que tu relises le tampon pour le vider avant de passer à la commande suivante.
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 81
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

comment je fais pour lire et vider a chaque fois ?

peux tu m'orienter?
Logged

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Salut,

comment je fais pour lire et vider a chaque fois ?
Pour vider le buffer du port série :
Code:
while(Serial.available()) Serial.read();
(tout simplement)
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

France
Offline Offline
Faraday Member
**
Karma: 36
Posts: 3442
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
(tout simplement)
Oui et non. Parce que rien n'empêche de quitter la boucle si on lit plus vite que les caractères n'arrivent.
Ou alors il faut le faire après une temporisation "raisonnable"
L'idéal étant de savoir combien de caractères on attend. Ce qui est normalement connu.
« Last Edit: June 06, 2012, 03:12:54 pm by fdufnews » Logged

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
(tout simplement)
Oui et non. Parce que rien n'empêche de quitter la boucle si on lit plus vite que les caractères n'arrivent.
Ou alors il faut le faire après une temporisation "raisonnable"
L'idéal étant de savoir combien de caractères on attend. Ce qui est normalement connu.
Si le but est de vider le buffer entrant à un instant t cette simple boucle le fait sans probléme.

Il n'y a même pas de question de temporisation, l'ancienne version de flush() était même encore plus rudimentaire, elle plaçait le curseur du buffer à la fin des données.
Ma boucle fait la même chose mais en moins directe.
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Offline Offline
Jr. Member
**
Karma: 0
Posts: 81
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

jai un probleme avec mon code


Code:
#include <SD.h>


char puissance[4];
int led = 13;
int onModulePin = 2;        // the pin to switch on the module (without press on button)
char imei[16];
int x = 0;

void switchModule(){
    digitalWrite(onModulePin,HIGH);
    delay(2000);
    digitalWrite(onModulePin,LOW);
}

void setup(){

    Serial.begin(115200);                // UART baud rate
    delay(2000);
    pinMode(led, OUTPUT);
    pinMode(onModulePin, OUTPUT);
    switchModule();                    // switches the module ON

    for (int i=0;i< 5;i++){
        delay(5000);
    }
    Serial.println("AT+CPIN=1234");
    delay(8000);
   
    Serial.println("AT+CGSOCKCONT=1,\"IP\",\"orange.lu\"");
    delay(1000); 
   
}

void loop() {
 
  getImei();
 
  delay(2000);
 
  reseau();
 
 
 
 // sd();
 
  delay(2000);
}
 
void getImei(){
  x=0;
  Serial.flush();
  Serial.println("AT+SIMEI?");
  while(Serial.read()!=':');
  while(Serial.read()!=' ');
  do{
        while(Serial.available()==0);
        imei[x]=Serial.read();
        x++;
  }while(x < 15);
  Serial.println(imei);
  Serial.flush();
 
 
  Serial.print("AT+CHTTPACT=\"twitter.fukuttenom.net"); //Connects with the HTTP server
  Serial.print("\",");
  Serial.println(80);       
   
  delay(5000);
         
  Serial.print("GET /getParam.php?imei=");
  Serial.print(imei);
  Serial.println(" HTTP/1.1");
  Serial.println("Host: twitter.fukuttenom.net");
  Serial.println("Content-Length: 0");
  Serial.println(); 
  Serial.write(0x1A);       //sends Ctrl+Z
  while(Serial.read()!='K');
  }
 
 void reseau(){
  x=0;
  Serial.flush();
  Serial.println("AT+CSQ");
  while(Serial.read()!=':');
  while(Serial.read()!=' ');
  do{
        while(Serial.available()==0);
       puissance[x]=Serial.read();
       x++;
 }while(x < 5);
 Serial.flush();
 Serial.println(puissance);
 
 }
 
 
 
void sd(){
   if (SD.exists("Data")){
     Serial.println("le dossier data existe deja");
  }
  else {
    SD.mkdir("Data");
    Serial.println("le dossier data a ete cree");
    }
}

la réponse est :


AT+CPIN=1234
AT+CGSOCKCONT=1,"IP","orange.lu"
AT+SIMEI?
355843030295301
AT+CHTTPACT="twitter.fukuttenom.net",80
GET /getParam.php?imei=355843030295301 HTTP/1.1
Host: twitter.fukuttenom.net
Content-Length: 0

AT+CSQ
13,9955843030295301


pourquoi les chiffres imei revienne?
Logged

Pages: [1]   Go Up
Jump to: