Show Posts
Pages: 1 2 [3] 4 5 ... 31
31  International / Français / Re: Comment puis-je faire une reset manuel sur un Leonardo on: September 16, 2014, 03:00:23 am
Salut,
Merci. Oui j'aivais aussi trouvé ceci. C'est de là que j'ai eu ce questionnement.
@_pepe_
Quote
Sinon, pour éviter de devoir faire face à une coupure de la liaison USB, on peut câbler un bouton-poussoir sur une entrée de l'Arduino Leonardo, et lancer une routine de réinitialisation logicielle quand on appuie dessus.

Pour plus de détails sur la façon de procéder, il faudrait connaître le besoin qui mène à utiliser une telle procédure, et le contexte de fonctionnement de la carte (variables, interruptions, périphériques présents, actuateurs éventuels...).

En fait ce que je pourrai faire, c'est mettre la pin 12 par exemple
Code:
pinMode(12,OUTPUT);
digitalWrite(12,LOW);
Mettre un cable entre la pin 12 et la pin rst
Puis dans ma loop()
Code:
void serialhwread(void)
{
  int i=0;
  char inSerial[5]; //inSerial[20]
  boolean error = false;
 
  if (Serial.available() > 0){   
     
      while (Serial.available() > 0) {
        inSerial[i]=(Serial.read());
        delay(10);
        i++;     
       }
   
    inSerial[i]='\0';
   
    /* REST THE BOARD */
    if(!strcmp(inSerial,"reset"))
    {
        Serial.println("> Reseting the board");
digitalWrite(12,HIGH);
delay(1500)
digitalWrite(12,LOW);
    }
   
   
    // Vide inSerial
    inSerial[0]='\0';
  }
}

Quand je tape 'reset' dans mon terminal, mon Leonardo devrait reseter sans perdre la connexion USB.
N'es-ce pas?
32  International / Français / Re: Comment puis-je faire une reset manuel sur un Leonardo on: September 15, 2014, 02:44:32 pm
Merci _pepe_!!!!
33  International / Français / Re: Comment puis-je faire une reset manuel sur un Leonardo on: September 15, 2014, 01:33:28 pm
D'accord,
On fait c'est pas trop important, mais ennuyant

Le truc c'est que mon programme avanc bien, mais il y a des fois ou j'aimerais que le programme recommence en appuyant sur le bouton reset.

Le probleme actuel, c'est que je dois toujours uploader mon programme pour voir tous les Serial.print(F("")), des le setup(). Ca m'est très utile pour le debugage.

C'est simplement pour ca que j'aimerais le reseter comme je le faisais avec UNO.

Je perds aussi très souvent a connection USB, et ca c'est encore plus ennuyant.
Dans tool->programmer. J'ai choisi (en fait j'ai rien fait) AVRISP mkII.
Es-ce juste? Ne devrais-je pas choisi l'un des USBxxx?
34  International / Français / Re: Comment puis-je faire une reset manuel sur un Leonardo on: September 15, 2014, 12:51:10 pm
@_pepe_
Quote
Sinon, pour éviter de devoir faire face à une coupure de la liaison USB, on peut câbler un bouton-poussoir sur une entrée de l'Arduino Leonardo, et lancer une routine de réinitialisation logicielle quand on appuie dessus.

Pour plus de détails sur la façon de procéder, il faudrait connaître le besoin qui mène à utiliser une telle procédure, et le contexte de fonctionnement de la carte (variables, interruptions, périphériques présents, actuateurs éventuels...).

En fait ce que je pourrai faire, c'est mettre la pin 12 par exemple
Code:
pinMode(12,OUTPUT);
digitalWrite(12,LOW);
Mettre un cable entre la pin 12 et la pin rst
Puis dans ma loop()
Code:
void serialhwread(void)
{
  int i=0;
  char inSerial[5]; //inSerial[20]
  boolean error = false;
 
  if (Serial.available() > 0){   
     
      while (Serial.available() > 0) {
        inSerial[i]=(Serial.read());
        delay(10);
        i++;     
       }
   
    inSerial[i]='\0';
   
    /* REST THE BOARD */
    if(!strcmp(inSerial,"reset"))
    {
        Serial.println("> Reseting the board");
digitalWrite(12,HIGH);
delay(1500)
digitalWrite(12,LOW);
    }
   
   
    // Vide inSerial
    inSerial[0]='\0';
  }
}

Quand je tape 'reset' dans mon terminal, mon Leonardo devrait reseter sans perdre la connexion USB.
N'es-ce pas?
35  International / Français / Re: Comment nettoyer mon buffer on: September 14, 2014, 03:06:22 pm
Salut pepe_
Je te remercie mille fois pour ton engagement.
Je ne suis plus a la maison mais je vais essayer ça plus tard.
Milles mercis!
36  International / Français / Re: Comment puis envoyer des données GET sur un serveur WEB on: September 14, 2014, 03:02:06 pm
Salut,
D'accord mais alors pourquoi elle répond avec les commandes qui la précédent?
37  International / Français / Comment puis envoyer des données GET sur un serveur WEB on: September 14, 2014, 02:37:05 pm
Bonjour à tous,

Je travaille sur une carte Arduino Leonardo ainsi que sur une carte SIM908.

Je résolte des coordonées GPS qui sont dans un buffer.
Je dois aussi les envoyer sur un serveur web pourqu'elles soit enregistrée dans une base de donnée mysql.
Le serveur est pret pour recevoir l'URL

J'ai essayé plusisurs solution en m'inspirant d'exemple, mais au final, mon code me retounr un message comme quoi il  y a eu un probleme avec l'URL

Donc sur le coup, je ne sais pas si je m'y suis bien pris,
Je suis aussi cette donc
http://www.dfrobot.com/image/data/TEL0051/3.0/SIM908_AT%20Command%20Manual_V1.01.pdf

Premierement, j'aurais voulu savoir si vous avec un exemple de code qui fonctionne

Si nous voici mon code.
Code:
void send_HTTP(){
   
   char aux_str[90];
   char fix[] = "g=2,195941,4613.161699,N,608.476854,E,1,9,1.398636,435.450073,M,48.200287,M,,0000";
 
   
    if(debug) Serial.println(F("> Starting sending data"));
    uint8_t answer=0;
   
    Serial.println(strstr(read_AT_string("AT+SAPBR=3,1,\"Contype\",\"GPRS\"", 4000,true),"OK") != NULL);
    Serial.println(strstr(read_AT_string("AT+SAPBR=3,1,\"APN\",\"intranet\"", 4000,true),"OK") != NULL);
    Serial.println(strstr(read_AT_string("AT+SAPBR=1,1", 20000,true),"OK") != NULL);

// Les trois lignes ci-dessus, me retorunent 1

   
    // Initializes HTTP service
    if(debug) Serial.println(F("> HTTPINIT"));
    answer = (strstr(read_AT_string("AT+HTTPINIT", 10000,true),"OK") != NULL);
    if (answer == 1)
    {
        // Sets CID parameter
        if(debug) Serial.println(F("> AT+HTTPPARA=\"CID\""));
        answer = (strstr(read_AT_string("AT+HTTPPARA=\"CID\",1", 2000,true),"OK") != NULL);
        if (answer == 1)
        {
            // Sets url
            if(debug) Serial.println(F("> AT+HTTPPARA=\"URL\""));

            Serial1.println("AT+HTTPPARA=\"URL\",\"http://aaaa.dyndns.org/opt/updatesql.php?");
            Serial1.print("g=2,195941,4613.161699,N,608.476854,E,1,9,1.398636,435.450073,M,48.200287,M,,0000\"");
            delay(10000);
   
            //sprintf(frame, "visor=false&latitude=%s&longitude=%s&altitude=%s&time=%s&satellites=%s&speedOTG=%s&course=%s",latitude, longitude, altitude, date, satellites, speedOTG, course);
           
            //Serial1.print(fix);
            //read_AT_string(fix,1,false);
           
            //read_AT_string("\"", 1,false);
            if(debug) Serial.println(F("> AT"));
            answer = (strstr(read_AT_string("AT", 5000,false),"OK") != NULL);
            if(debug_buffer)
            {
              Serial.println(F("------- Show buffer------"));
              Serial.println(buffer);
              Serial.println(F("-------------------------"));
            }
           
            if (answer == 1)
            {
                 
                answer = (strstr(read_AT_string("AT+HTTPACTION=0", 40000,false),"+HTTPACTION:0,200") != NULL);
                if (answer == 1)
                {

                    if(debug) Serial.println(F("  Done!"));
                    if(debug_buffer)
                    {
                      Serial.println(F("------- Show buffer------"));
                      Serial.println(buffer);
                      Serial.println(F("-------------------------"));
                    }
                }
                else
                {
                    if(debug) Serial.println(F("  Error getting url"));
                    if(debug_buffer)
                    {
                      Serial.println(F("------- Show buffer------"));
                      Serial.println(buffer);
                      Serial.println(F("-------------------------"));
                    }
                }

            }
            else
            {
                if(debug) Serial.println(F("  Error setting the url"));
            }
        }
        else
        {
            if(debug) Serial.println(F("  Error setting the CID"));
        }   
    }
    else
    {
        if(debug) Serial.println(F("Error initializating"));
    }

    if(strstr(read_AT_string("AT+HTTPTERM", 5000,true),"OK") != NULL);
   
}

La fonction read_AT_string(), envoie la comment et met dans un buffer la réponse.
le parametre true ou false, dans cette meme comment, va utilier
Code:
Serial1.print("AT") //si false
Serial1.println("AT") //si true

Ce code me retourne toujours
Quote
  Error setting the url


En fait, je me demande, si je me suis bien pris.

Ma grande question, pourriez-vous me dire les commandes AT a executer, et leur ordre pour l'envoie des données sur un serveur MySQL/PHP en GET (voir en POST)

Je ne pense pas être loin du résultat..

Milles mercis à vous
38  International / Français / Re: Comment nettoyer mon buffer on: September 14, 2014, 02:22:26 pm
Pépé_ je te remercie mille fois pour tout ce que tu fais. Mais je m'excuse, je n'arrive toujours pas reprendre ton code  smiley-roll-sweat smiley-roll-sweat smiley-roll-sweat

Code:
#define NBVALS 15
char ligne[NBVALS];
//J'ai dans mon buffer mon cheni dont il faut extraire, la ligne  15 paramettre
GPGGAParams(buffer,ligne); // Le 4 me semble étrange

void GPGGAParams(char *buffer, char *ligne)
{
  char *p = buffer;
  char *ligne; // Ca bug ici

  while (*p) {
    if (*p==',' || *p>='0' && *p<='9') { // début des paramètres
      ligne = p++;
      while (*p) {
        if (*p=='\n' || *p=='\r') { // fin de ligne
          *p = '\0';
          break;
        }
        p++;
      }
      return ligne;
    }
    do {
      if (*p=='\n' || *p=='\r') { // LF ou CR
        p++;
        break;
      }
      p++;
    } while (*p);
  }
  return NULL;
}

Ce que je ne comprends pas c'est
'ligne'
J'ai une erreur, d'ailleur dans mon code a ce niveau char *ligne; // Ca bug ici

Et ou est stoqué le résultat, dans lignes?
Je vois
Code:
return ligne;
mais pourtant la fonction est void

Ha oui, encore un petit détail, mais c'est pas grave...
Le début de ma chaine commencera toujours pas '2,'. Voir peut être un autre chiffre, mais avec un digit et une virgule :o)

Oufs.... J'y arriverai smiley
39  International / Français / Re: Comment fusionner des char avec sprintf on: September 14, 2014, 07:32:16 am
Problème résolu
Voici la solution
Code:
********/
/* SMS */
boolean SendSMS(char *number_str, char *message_str)
{
  char ch[30];
  Serial.println("> Sending a SMS");
  if(strstr(read_AT_string("AT",3000),"OK") != NULL)
  {
      if(debug_buffer) Serial.println(buffer);
      //Set message mode
      read_AT_string("AT+CMGF=1",1000);
      if(debug_buffer) Serial.println(buffer);
     
      sprintf(ch, "AT+CMGS=\"%s\"", number_str);
      read_AT_string(ch,3000);
     
      read_AT_string(message_str,1000);
      Serial1.write(26);
  }
 
  return true; // Temporaire
}
Si vous avez mieux à proposer = welcome
40  International / Français / [Resolu]Comment fusionner des char avec sprintf on: September 14, 2014, 06:37:42 am
Bonjour,

J'essayer d'envoyer un SMS.

Pour cela je dois faire ceci qui fonctionne

(Attention, je n'ai pas encore travailler sur le return true, Donc il retourne toujours true...)

Code:
boolean SendSMS(char *number_str, char *message_str)
{
  Serial.println("> Sending a SMS");
  if(strstr(read_AT_string("AT",4000),"OK") != NULL)
  {
      if(debug_buffer) Serial.println(buffer);
      //Set message mode
      read_AT_string("AT+CMGF=1",3000);
      if(debug_buffer) Serial.println(buffer);
      //Send message
      read_AT_string("AT+CMGS=\"+4170000000\"",300);
      if(debug_buffer) Serial.println(buffer);

      read_AT_string(message_str,1000);
      Serial1.write(26);
      if(debug_buffer) Serial.println(buffer);
  }
  
  return true;
}

Le truc c'est que je souhaite utiliser le parametre number_str.

Pour cela, j'ai modifier la fonction ainsi

Code:
boolean SendSMS(char *number_str, char *message_str)
{
  char *ch;
  Serial.println("> Sending a SMS");
  if(strstr(read_AT_string("AT",4000),"OK") != NULL)
  {
      if(debug_buffer) Serial.println(buffer);
      //Set message mode
      read_AT_string("AT+CMGF=1",3000);
      if(debug_buffer) Serial.println(buffer);
      //Send message
       sprintf(ch, "AT+CMGS=\"%s\"", number_str);
      read_AT_string(ch,3000); // Send the command set in ch

      read_AT_string(message_str,1000);
      Serial1.write(26);
      if(debug_buffer) Serial.println(buffer);
  }
  
  return true;
}

Si le message a bien été envoyé ca doit reurner true, ou false, si non. Mais ca j'en suis pas encore là.

Ceci ne fonctionne pas
Code:
sprintf(ch, "AT+CMGS=\"%s\"", number_str);

La premiere question c'est les
Code:
%c
J'ai vu %s, %d et je en sais pas lequel utiliser.
J'ai lu cecu ;
http://www.cplusplus.com/reference/cstdio/printf/
donc je suppose que je dois utiliser le %s mais ca ne fionctionne toujours.

Je vines de constater que le code moline/s'arrete avant
Code:
sprintf(ch, "AT+CMGS=\"%s\"", number_str);

Pourriez m'éclairecir là-dessus?

Mercisssss
41  International / Français / Re: Comment puis-je faire une reset manuel sur un Leonardo on: September 14, 2014, 05:07:21 am
Salut,
Merci pour ce signalement, je l'ai fait.
Je n'ai pas encore clos se sujet. Je suis passé sur un autre truc. Mais je mettrai ma solution dans les 2-3 jours qui suivent.
42  International / Français / Re: Comment nettoyer mon buffer on: September 14, 2014, 04:40:56 am
PS, d'un côté, si je peux aussi avoir comme résultat et remplacer

Code:
0:AT+CGPSINF=2
1:
2:2,093749,4613.165174,N,608.471244,E,1,7,1.189542,429.716888,M,48.200226,M,,0000
3:OK
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
par ca
Code:
0:2,093749,4613.165174,N,608.471244,E,1,7,1.189542,429.716888,M,48.200226,M,,0000
1:OK
2:QUIMPORTE
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:

Ca me va aussi.
Ainsi je sais que la valeur recherché se trouvera toujours en premiere position 0:, qu'importe ce qu'il y a dans les suivantes. De plus, de mémoire, la fonction qui envoi la valeur sur le serveur, attent un String qui sépare justement les paramètres par des virgules. Excatement comme ceci:
Code:
2,093749,4613.165174,N,608.471244,E,1,7,1.189542,429.716888,M,48.200226,M,,0000
Donc pour avoir ma valeur à envoyer, il me suffira juste de fix[0], qu'importe de ce qu'il y a apèrs. C'est le serveur qui spliter les donnée en fonction des ','

Ca me semble plus simple. Simplement, maintenant, comme faire pour détecter la ligne qui à 15 paramètres, séparé par des virgule et le copier en position 0: ?  smiley-roll-sweat
43  International / Français / Re: Comment nettoyer mon buffer on: September 14, 2014, 04:32:17 am
Salut _pepe_,

Je te remercie encore pour ton aide, Je peine....

J'ai essayé ton deuxieme code qui m'affiche ceci

Quote
0:AT+CGPSINF=2
1:
2:2,092525,4613.165174,N,608.471244,E,1,6,1.373523,429.716888,M,48.200226,M,,0000
3:OK
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:

NB: Je dois tenir en compte qu'il peut avoir de retour à la ligne, tout comme il peut ne pas en avoir. Donc la chaine de caracter qui m'intàresse, mais elle peut etre en position 1 ou 3 ou 4....

Dans ce cas, on ne pourrait pas détecter la ligne qui contient 15 parametre séparer par des virgule, placer cette ligne sur la position 14, lire la ligne 14, mettre le premier paramettre sur 0: le deuxièeme sur 1: le troisième sur 2: etc pour trouver 0000 sur 14:

Je te remercie pour ton aide car je suis larger, là!!  smiley

PS: Je ne peux pas perdre la ligne vie, soit le parametre vide
44  International / Français / Re: Comment nettoyer mon buffer on: September 13, 2014, 05:50:11 pm
Hello,

J'ai pas trop compris la deuxième partie de ton code. Peut-être l'heure  smiley

Code:
// read data to gps_buf[] from GPS
static char* gps_read (void) {
 
  if(strstr(read_AT_string("AT+CGPSINF=2",3000),"OK") != NULL)
  {
    if(debug_buffer)
    {
      Serial.println(F("------- Show buffer------"));
      Serial.println(buffer);
      Serial.println(F("-------------------------\n"));
    }
    GPGGAParams(buffer,fix); // P
   
    // Display $GPGGA fix
    if(debug)
    {
      for(int i =0; i< NBVALS; i++)
      {
        Serial.print(i); Serial.print(F(":")); Serial.println(fix[i]);
      }
    }

  }
 
}

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


Ce code me donne un bon résultat.
Quote
0:AT+CGPSINF=2

2
1:224725
2:4613.168333
3:N
4:608.476599
5:E
6:1
7:9
8:1.174264
9:413.947083
10:M
11:48.200256
12:M
13:
14:0000
OK

Le seul truc qui m'embête, c'est qu'à la position 0, il ne devrait pas avoir
AT+CGPSINF=2
et les deux reour à la ligne. Il faurdait juste le dernier 2.

et à la position 14, il faudait juste avoir

14:0000,

sans le retur à la ligne et le OK
45  International / Français / Re: Comment nettoyer mon buffer on: September 13, 2014, 04:47:22 pm
Ok, je te remercie. Je vais regardé tout ca demain.
Milles mercis, ca semble super bien!!!!
Pages: 1 2 [3] 4 5 ... 31