Show Posts
Pages: 1 [2] 3 4 ... 29
16  International / Français / Re: Comment nettoyer mon buffer on: September 13, 2014, 04:28:24 pm
MERCI _pepe_ pour ce code intéressant.

Je l'essaye sur mon code. Mais je dois pouvoir utiliser val. C'est une valeur que je vais envoyer dans une base de donnée.
Donc il faut que my fonction gps_read()

Code:
static char* gps_read (void) {
 
  if(strstr(read_AT_string("AT+CGPSINF=2",3000),"OK") != NULL)
  {
   
    Serial.println(F("------- Show buffer------"));
    Serial.println(buffer);
    Serial.println(F("-------------------------\n"));
   
    litParametres(buffer,val);
   
    return val
  }
  else
  {
     return "Error : no fix";
  }
 
}

void litParametres(char *buffer, char **val)
{
  char *p = buffer;
  int i = 0;
  val[i++] = p;
  while (*p) {
    if (*p==',') {
      *p++ = '\0';
      if (i<NBVALS)
         val[i++] = p;
    } else
      p++;
  }
  while(i<NBVALS)
    val[i++] = p;
}

Ce que je peine à comprendre, c'est comment faire pour que gps_read() retourn la valeur val qui se trouve dans litParametres..

Milles mercis
17  International / Français / Re: Comment nettoyer mon buffer on: September 13, 2014, 04:01:03 pm
Ok super, merci, je vais voir ca
18  International / Français / Re: Comment nettoyer mon buffer on: September 13, 2014, 01:45:22 pm
Je pensais à un truc du genre (meme si ne supprime pas encore le OK et la commande et le CR)
Code:
void gps_explode(void)          //get ','

  char fix;
 
  int z = 0;
  int y = 0;
 
  for(y=0; y < strlen(buffer); y++)
  {
    if(buffer[y]==',')
    {
      z++;
    }
    else
    {
      fix[z][y]=buffer[y];
    }
   
    if(y==num)//if the command is right, run return
      y=strlen(buffer)+1;
  }
}

Mais ca ne semble pas fonctionner en C++.
Il a pas l'air d'aimer  smiley-razz
Code:
fix[z][y]=buffer[y];
19  International / Français / Comment analyser mon buffer on: September 13, 2014, 01:37:51 pm
Bonjour bonjour!!

J'arrive à récolter les localisation du GPS. Je stok ceci dans un buufer
Quote
AT+CGPSINF=2

2,182822,4613.161213,N,608.474865,E,1,9,1.179917,433.212921,M,48.200256,M,,0000
OK
La dedans, il y a que ceci qui m'intéresse
Quote
2,182822,4613.161213,N,608.474865,E,1,9,1.179917,433.212921,M,48.200256,M,,0000

J'ai pas beucoup d'expérience avec C++. Avec php il y a qui me permet de remplacer un string que je ne veux plus par un espace.
J'ai aussi vu qu'il y  readBytesUntil, mais apparement c'est une class de Serial.

Bref, ce que j'aimerais surtout c'est d'avoir au final un truc du genre:
Quote
val[0]=2
val[1]=182822
val[2]=4613.161213
val[3]=N
val[4]=608.474865
val[5]=E
val[6]=1
val[7]=9
val[8]=1.179917
val[9]=433.212921
val[10]=M
val[11]=48.200256
val[12]=M
val[13]=
val[14]=0000

Pourriez-vous me mettre sur la piste?

Milles mercis
20  International / Français / Re: Comment puis-je faire une rest manuel sur un Leonardo on: September 13, 2014, 01:29:54 pm
Merci pour tes explications
Pour être franc avec toi, j'ai travaillé sur un autre truc, car en effet, c'est pas super obligatoire.
Mais je reviendrai là dessus, aussi tot que j'aurai terminer pour problème actuel.
Mais j'ai tout lu. Merci
21  International / Français / Comment puis-je faire une reset manuel sur un Leonardo on: September 13, 2014, 05:06:12 am
Bonjour à tous

J'ai changer de UNO a LEONARDO.
Sur le Leonardo, il y a un bouton rest qui ne fonctionne pas quand on a un cable USB connecté à l'ordi. EN fait d'après ce que j'ai compris, le carte reset, mais on ne voit rien à l'écran car la connection USB n'est plus étabéie
Plus de détail
http://arduino.cc/en/Guide/ArduinoLeonardoMicro?from=Guide.ArduinoLeonardo#toc3

J'ai pas exctement tou compris l'explication. Peut-être que mon anglais n'est pas assez bon.
Mais j'ai fait ceci, comme indiqué

Code:
Serial1.begin(baud_rate);          // Comm to GPS/GSM
    while(!Serial1);                    // while the serial stream is not open, do nothing:

Ceci, quand j'appui sur le bouton reset, je ne vois pas, sur mon terminal, que le module reset.

Je voulais savoir comment résoudre ce probleme.

Aussi, j'ai comme fait une recherche et je voulais aussi savoir ce que vous en penser.
Sur la carte Leonardo, il y a une pin rest.
Es-ce que si je la mettais à 1, es-ce que résoudrait mon prblème, ou j'aurai le meme.

En effet, je trouve pratique de pouvoir rséseter sa carte, maniellement, avec le bouton.

Merci pour vos lumières.
22  Using Arduino / Programming Questions / Re: How do I put into a buffer, a part of Serial response (UART) on: September 10, 2014, 01:14:55 pm
Dear Paul,
thank for reading my post
Quote
No, you didn't. You could have used the Additional Options... link and attached the file to your post.
Sorry I have not seen that option. But as I update my file I leave it into the remote place. But in nay case I will publish the solution. Of course

I did a wrong manipulation, because I wrote comment in CAPITAL. The file you read, the comment was not there. I updated my file with comment.

Quote
Do you understand what readBytesUntil() does?
Yes, but may be I am wrong. Here is the comment I added aboce readBytesUntil()
Quote
// Serial.readBytesUntil READ THE RESPONSE UNTIL IT MEET THE CARACTER SPECIFIED IN THE FIRST PARAMETER. IN MY CASE
         //IS <CR> (13). BUT I DO NOT KNOW IF IT WORK AS MY CODE NEVER RUN UNTIL THIS STEP.
         // WHEN readBytesUntil reach '13', IT BUT THE STRING INTO buffer, AND IT RETURN A BYTE BALUE EGAL TO THE NUMBER OF
         // CARACTERS STORE IN buffer
         // IN MY IF CONDITION, WHEN index IS EGAL TO THE RETURN VALUE (byte) OF readBytesUntil() IT RETURN FALSE AND CONTINUE
 

Quote
Are you using Serial to talk to the PC or to talk to the TEL0051 shield?
Serial talk to TEL0051 and I do have an USB cable from my Mac to Arduino to read what display the terminal
23  Using Arduino / Programming Questions / How do I put into a buffer, a part of Serial response (UART) on: September 10, 2014, 12:32:38 pm
Dear All,

While I send an AT command I need to put into a buffer the response.
I do have an Arduino UNO and TEL0051 shild with SIM908.
http://www.dfrobot.com/index.php?route=product/product&product_id=673&search=tel0051&description=true
I also created a special ino file to work on that issue (see below)

First I quickly look at the AT command for SIM908
http://www.dfrobot.com/image/data/TEL0051/3.0/SIM908_AT%20Command%20Manual_V1.01.pdf
If you look at page 13, you can raed:
Code:
The "AT" or "at" prefix must be set at the beginning of each Command line. To terminate a
Command line enter <CR>.
Commands are usually followed by a response
that includes. "<CR><LF><response><CR><LF>"
Throughout this document, only the responses are presented, <CR><LF> are omitted
intentionall

Then when I send an AT command, I should "filter" the data from CR LF and the second CR LF.
I have difficulties to do that and I really will appreciate your help

Then now if you look at page 266, there is command AT+GPSSTATUS and the repsonse.

Now my code. I created a read_AT_serial.iono file will necessery code. Most of them it to start the module and power the GPS. It work. In order to understand my issue, look at loop() and read_AT_string(char* command, int timeout)

loop() will, each 10sec, call read_AT_string(). read_AT_string() will send the command and try to put into a buffer the response of the AT command.

For my exercise, I use AT+GPSSTATUS command. The detail is at page 266.
I adding comment in CAPITAL

Here is the code in a txt file (I had to put that code into an external file)
http://www.hello-web.net/temp/read_AT_string.txt

Here is what display buffer (It display a lot of '1' for the time of timeout. I do not pasted all '1')

Quote
DISPLAY BUFFER:
AT+GPSSTATUS
1
1
1

1
1
1
1

END DISPLAY BUFFER

If you look at page 226, I should have an response looking at this
Quote
Response
+CGPSSTATUS: Location Not Fix
OK

I hope I provided clear information and you can check at my code, because I am blocked and I do not have any colleague who have experience on my issue.

PS: When I will solve that issue, I will delete sendATcommand() and adapt read_AT_command while I am looking for a special response from the buffer.

Many thank.
Feel you free to ask me additional information
24  Using Arduino / Programming Questions / Re: How can I make sure that the Serial UART is clean on: September 10, 2014, 11:54:32 am
Dear Robin,

Thank for coming back. I am going to close that topic.
In fact I discovered there is always data "runing" in serial.

I red the datasheet of At command Sim908 and it state
Code:
The "AT" or "at" prefix must be set at the beginning of each Command line. To terminate a
Command line enter <CR>.
Commands are usually followed by a response
that includes. "<CR><LF><response><CR><LF>"
Throughout this document, only the responses are presented, <CR><LF> are omitted
intentionally.

Then now, I am concentrated n how to make into a buffer <response>. I am going to open a new post
http://forum.arduino.cc/index.php?topic=266073.msg1876089#msg1876089
with my investigation with all infrmation, as you mentionned.

Thank a lot
25  International / Français / Re: Comment afficher/mémoriser ce que retourne une commande AT on: September 10, 2014, 10:18:09 am
Salut fdufnews,

Merci.
D'accord.
J'ai fait un fichier read_at_string.ino avec que les fonctions utilses et pour fournir le code complet.

Les fonctions qui concerne ce post, sont loop() et read_AT_string() (J'ai renomer read_String()).

Donc dans read_AT_string() il faudrait ajouter Serial.available(). OK. je vais ajouté ceci

Ce qui m'interpelle, ce qu'avant le
Code:
Serial.read()
il y a 
Code:
if (Serial.peek()==13)
et cette condition retourne false parce que
Code:
Serial.println("13")
; n'affiche rine

Voici le code complet.
Code:
#include <SoftwareSerial.h>

int baud_rate = 9600;
int pin_gsm = 3;
int pin_gps = 4;
int pin_power = 5;
//int pin_dtr = 6;
boolean debug = true;
boolean raedy_to_go = false;

// Reading String
#define BUFFERSIZE 200
char buffer[BUFFERSIZE];
char inChar;
int index;

void setup()
{
  Serial.begin(baud_rate);
  delay(5000);                         // Wait for 5sec after begin
 
  if(debug)
  {
    Serial.println(F("\n****************************"));
    Serial.println(F("STARTING SYSTEM Read AT stream"));
    Serial.println(F("******************************"));
  }
  pinMode(pin_gsm,OUTPUT);            // Set the pins
  pinMode(pin_gps,OUTPUT);
  pinMode(pin_power,OUTPUT);
 
  powerUpSim908:
  if(powerUpSim908())
  {
    delay(1000);
   
    if(gps_power()){
     
      gsm_enable();
      raedy_to_go = true;
   
      if(debug)
      {
        Serial.println(F("\n****************************"));
        Serial.println(F("READY TO GO\n"));
        Serial.println(F("****************************\n"));
      } 
    }
    else
    {
      raedy_to_go = false;
      if(debug)
      {
       Serial.println(F("\nNOT READY TO GO.\nGPS could not be power\nRestart the module\nor/and check the battery level.\n"));
      }
      goto powerUpSim908;
    }
  }
  else
  {
    raedy_to_go = false;
    if(debug)
    {
      Serial.println(F("\nNOT READY TO GO.\nCheck the battery level.\n"));
    }
  };
}

void loop()
{
  /*
   if (Serial.available())
   {
     Serial.print("Character received: ");
     Serial.write(Serial.read());
     Serial.println("");
   }
   */
    if(raedy_to_go)
    {
     
       read_AT_string("AT",5000);
       delay(10000);
     
    } 
   
}

char read_AT_string(char* command, int timeout)
{
  unsigned long previous;
  previous = millis();
 

  Serial.println(F("DISPLAY BUFFER:"));
  index=0;
  Serial.println(command);
  do
  {
    if(Serial.available() > 0) // Don't read unless
    // there you know there is data
    {
      Serial.println("1");
      if (Serial.peek()==13)           // check if CR (without reading)
      {     
        Serial.println("13");
if (Serial.available() > 0) {
        Serial.read();                // read and ignore
        if (Serial.peek()==10)        // then check if LF (without reading)
         {
           Serial.println("10");
           if(index < Serial.readBytesUntil(13, buffer, BUFFERSIZE-1))   // One less than the size of the buffer array
            {
              Serial.println("b");
              inChar = Serial.read();  // Read a character
              buffer[index] = inChar;  // Store it
              index++;                 // Increment where to write next
              buffer[index] = '\0';    // Null terminate the string
            }
           
         }
} // END OF THE SECOND Serial.available()
      }
    }
  }while(((millis() - previous) < timeout));
 
  Serial.println(buffer);
  buffer[0]='\0';
  Serial.println(F("END DISPLAY BUFFER"));
}

/* FUNCTION */

boolean powerUpSim908(void)
{
  if(debug)
  {
    Serial.println(F("Powering up SIM908")); 
  }
  boolean turnedON = false;
  //uint8_t answer=0;
  int cont;
   
  for (cont=0; cont<3; cont++)
  {
    digitalWrite(pin_power,HIGH);
    delay(1500);
    digitalWrite(pin_power,LOW);

    Serial.println(F("Checking if the module is up"));
    if(sendATcommand("AT", "OK", 5000))
    {
cont = 4; // Leave the loop
turnedON = true;
    }
    else
    {
      turnedON = false;
      if(debug)
      {
Serial.println(F("\nTrying agin to turn on SIM908")); 
      }
    };
  }

  if(turnedON)
  {
    if(debug)
    {
      Serial.println(F("Module is tunrned up\n"));
    }
  }
  else
  {
      if(debug)
      {
Serial.println(F("Module is NOT tunrned ON\n")); 
      }
   }
    return turnedON;
}

boolean sendATcommand(char* ATcommand, char* expected_answer, unsigned int timeout)
{
    uint8_t x=0;
    bool answer=false;
    //åchar response[100];
    //buffer[0]='\0';
    unsigned long previous;

    //memset(response, '\0', 100);    // Initialice the string
    //Serial.println(response);
   
    delay(100);

    while( Serial.available() > 0) Serial.read();    // Clean the input buffer
 
    if (ATcommand[0] != '\0')
    {
        Serial.println(ATcommand);    // Send the AT command   
    }

    x = 0;
    previous = millis();
   
    index=0;
    do
    {
      if(Serial.available() > 0)
      // there you know there is data
      {
        if(index < BUFFERSIZE-1) // One less than the size of the array // Same as buffer size
        {
          inChar = Serial.read(); // Read a character
          buffer[index] = inChar; // Store it
          index++; // Increment where to write next
          //Serial.println(index);
          buffer[index] = '\0'; // Null terminate the string
        }
      }
    }while(((millis() - previous) < timeout));


    if(strstr(buffer,"NORMAL POWER DOWN") != NULL)
    {
       answer = false;
    }
    else if (strstr(buffer, expected_answer) != NULL)    // check if the desired answer (OK) is in the response of the module
    {
     
      /*
      Serial.println(F("### BUFFER"));
      Serial.println(buffer);
      Serial.println(F("### END BUFFER"));
      */
       answer = true;
    }
    else
    {
      answer = false;
    }
             
if(debug)
        {
      if(answer)
        {
    //Serial.println(F("Expected answer : OK!\n"));
      }
      else
      {
    //Serial.println(F("Expected answer : KO!\n"));
      };
  }   
  return answer;
}


void gps_enable(void)
{
  if(debug)
  {
    Serial.println(F("\nEnabling GPS ..."));
  }
  digitalWrite(pin_gps,LOW);                //Enable GPS mode
  digitalWrite(pin_gsm,HIGH);                //Disable GSM mode
  delay(2000);
}



void gsm_enable(void)
{
  if(debug)
  {
    Serial.println(F("\nEnabling GSM ..."));
  }
  digitalWrite(pin_gsm,LOW);                //Enable GSM mode
  digitalWrite(pin_gps,HIGH);               //Disable GPS mode
  delay(2000);
}


/* UTILISTIES */


/* GPS */

boolean gps_power(void)                            //turn on GPS power supply
{
  /*
  Serial.println("AT"); 
  delay(2000);
  */
 
  boolean gpspwr = false;
  boolean gpsrst = false;
 
                                           
  if(sendATcommand("AT+CGPSPWR=1","OK",2000))
  {
    gpspwr = true;
     if(debug)
    {
      Serial.println("turn on GPS power supply => OK");
    }
  }
  else
  {
    if(debug)
    {
      Serial.println("turn on GPS power supply => KO");
    }
  };
  //delay(1000);

  if(sendATcommand("AT+CGPSRST=1","OK",2000))
  {
    gpsrst = true;
    if(debug)
    {
      Serial.println("reset GPS in autonomy mode => OK");
    }
  }
  else
  {
    if(debug)
    {
      Serial.println("reset GPS in autonomy mode => KO");
    }
  };   //reset GPS in autonomy mode

  delay(1000);
 
  if(gpspwr && gpsrst)
  {
    return true;
  }else
  {
    return false;
  }
}

Merci
26  International / Français / Re: Comment afficher/mémoriser ce que retourne une commande AT on: September 10, 2014, 08:55:46 am
En fait, dans la fonction read_String() ci-dessus, la commande AT est exécutée, la fonction read_String est appellée dans le but d'afficher le retour de la command. Soit ce qui se trouve entre CR+LF.
Après 5 seconde, il sort bien de la boucle. Mais en revanche
Code:
Serial.println("13");
 Serial.println("10");
ne sont pas affiche, surement parce que les conditions if Serial.peek() retourn false

Pourrais-tu m'aiguiller?

Milles mercis
27  International / Français / Re: Comment afficher/mémoriser ce que retourne une commande AT on: September 10, 2014, 06:32:55 am
Oui fdufnew, entre temps, j'ai chercher une solution, mais je ne suis pas sure. Pourrais-tu jeter un oeil et me corriger
Code:
#define BUFFERSIZE 200
    chat buffer[BUFFERSIZE];
    void setup()
    {
        Serial.begin(9600);
        // JE NE METS PAS LE CODE QUI SUIT. CA FONCTION ET E PROBLEM EST AU MOMENT OU JE LANCE LA COMMANDE
        // JE LANCE UNE COMMANDE AT
    Serial.print("AT");
        // JE RECUPERE UNIQUEMENT LA REPONSE DE LA COMMANDE AT
    read_String(5000);
    }
   
char read_String(int timeout)
{
  unsigned long previous;
  previous = millis();
 
 
  Serial.println(F("DISPLAY BUFFER:"));
  index=0;
  do
  {
    if(Serial.available() > 0) // Don't read unless
    // there you know there is data
    {
      Serial.println("1");
      if (Serial.peek()==13)           // check if CR (without reading)
      {     
        Serial.println("13");
        Serial.read();                // read and ignore
        if (Serial.peek()==10)        // then check if LF (without reading)
         {
           Serial.println("10");
           if(index < Serial.readBytesUntil(13, buffer, BUFFERSIZE-1))   // One less than the size of the buffer array
            {
              Serial.println("b");
              inChar = Serial.read();  // Read a character
              buffer[index] = inChar;  // Store it
              index++;                 // Increment where to write next
              buffer[index] = '\0';    // Null terminate the string
            }
           
         }
      }
    }
  }while(((millis() - previous) < timeout));
 
  Serial.println(buffer);
  buffer[0]='\0';
  Serial.println(F("END DISPLAY BUFFER"));
}



Merci beaucoup
28  International / Français / Re: Comment afficher/mémoriser ce que retourne une commande AT on: September 10, 2014, 05:34:11 am
Oui mais comment filtrer uniquement la réponse du commande AT.

Serial.read() m'affichera aussi bien

Serial.print("cocucou") et la réponse de
Serial.print("AT");

et je souhaite filtrer la réponse d'une comamnd AT
29  International / Français / Comment afficher/mémoriser ce que retourne une commande AT on: September 09, 2014, 05:21:36 pm
Bonjour à tous!

J'essaye de comprendre un truc.
Quand je lance une commande AT
come
Code:
Serial.print("AT")
Serial.println("AT+CGPSSTATUS?");
Ca doit retourner des valeurs correspondantes à ces commande.
Apparament ces valeurs peuvent être mélangée avec un
Code:
Serial.println("coucou");

J'ai lu dans ce document, à la page 13
http://www.dfrobot.com/image/data/TEL0051/3.0/SIM908_AT%20Command%20Manual_V1.01.pdf
ceci:
Quote
The "AT" or "at" prefix must be set at the beginning of each Command line. To terminate a
Command line enter <CR>.
Commands are usually followed by a response
that includes. "<CR><LF><response><CR><LF>"
Throughout this document, only the responses are presented, <CR><LF> are omitted
intentionally

Donc si j'ai bien compris, avec ceci:
Code:
void setup()
{
Serial.println("AT+CGPSSTATUS?");
}
void loop()
{   
      if (Serial.available())
       {
         Serial.write(Serial.read());
       }
    } 
   
}
Je devrais pour voir lire la réponse de
Code:
Serial.println("AT+CGPSSTATUS?");

Je pense que je ne suis pas faux, n'es-ce pas?

Mainteant j'aimerais savoir comment je peux alors filtrer la réponse, ce qui se trouve entre
Code:
<CR><LF>
et
Code:
<CR><LF>

Es-ce que je suis sur la bonne voix?
Pourriez-vous m'éclairecir?

Ce qui m'intéresse alors, c'est comment mettre dans un buffer <response>

Code:
<CR><LF><response><CR><LF>

Je vous remercie
30  International / Français / Quelle est la différence entre Serial.write() et Serial.print() on: September 09, 2014, 04:27:11 pm
Bonjour,

J'ai une question bête, mais j'aimerais savoir la différence de

Serial.print() et Serial.write

En fait ce qui m'intéresse surtout de savoir quelle est la différence entre

Code:
Serial.println("AT+CGPSSTATUS?");
Serial.print("AT+CGPSSTATUS?");
Serial.write("AT+CGPSSTATUS?");

et

Code:
Serial.println("Hello");
Serial.write("Hello");

J'ai lu que Serial.write return en byte, la longeur du string

mais quel sera l'impact sur Serial.write(Serial.read()); si j'utilise Serial.print()
Code:
if (Serial.available())
       {
         Serial.write(Serial.read());
       }

Voilà, en résumé, ceci va lancer la commande pour connaitre le status du GPS
Code:
Serial.print("AT+CGPSSTATUS?");
Serial.write("AT+CGPSSTATUS?");
mais quelle sera la différence?

Merci
Pages: 1 [2] 3 4 ... 29