Go Down

Topic: Problème de communication entre 2 Ports Series (Read 139 times) previous topic - next topic

Endown

Bonjour,

Voici mon projet: j'ai pour objectif de construire un aéroglisseur de A à Z, pour l'instant je m'occupe de la partie numérique avec les capteurs et je suis entrain de programmer mon capteur GPS pour connaître la position exacte de mon aéroglisseur.

J'utilise le capteur GPS Grove v1.2. J'ai utilisé le programme à disposition sur leur site pour voir comment ce capteur fonctionnait.

J'obtenais des trames comme celles-ci : https://raw.githubusercontent.com/SeeedDocument/Grove-GPS/master/img/GPS_result.jpg mais il n'y a que la partie en rouge qui m'intéressait.
J'ai donc modifié le programme pour obtenir quelque chose comme ça :

Code: [Select]

#include <SoftwareSerial.h>
#include <stdio.h>
SoftwareSerial gps(10, 11);
unsigned char buffer[64];
unsigned char lat1[26];
unsigned char lng2[26];
    
int count=0;
int mot1=0;
int mot2=0;


                              
void setup()
{
    gps.begin(9600);                
    Serial.begin(9600);
                      
}

void loop()
{
    if (gps.available())                    
    {
        while(gps.available())              
        {
            buffer[count++]=gps.read();      
            if(count == 64)break;
        }

    
        delay(500);
        clearBufferArray();                        
        count = 0;
    }


    if(gps.available())
    {
      char currentchar1 = 'p';
      while(gps.available())
      {
        char currentchar1 = gps.read();
        if(currentchar1 == '4')
        {
          lat1[mot1++]='4';
          break;
        }
      }

      currentchar1 = '.';
      while(gps.available() && currentchar1 != ',')
      {
        currentchar1 = gps.read();
        lat1[mot1++]=currentchar1;
        
      }
      if(mot1 != 10)
      {
        clearLat1Array();
        mot1=0;
      }
      else
      {
      lat1[9] = '\0';    
      }
    }


    if(gps.available())
    {
      char currentchar2 = 'p';
      while(gps.available())
      {
        char currentchar2 = gps.read();
        if(currentchar2 == '0')
        {
          lng2[mot2++]='0';
          break;
        }
      }

      currentchar2 = '.';
      while(gps.available() && currentchar2 != ',')
      {
        currentchar2 = gps.read();
        lng2[mot2++]=currentchar2;
        lng2[11-1] = '\0';
        
      }
      if(mot2 != 11)
      {
        clearLng2Array();
        mot2=0;
      }
      else
      {
      lng2[11] = '\0';    
      }
    }


// Conversion de DD en DMS
{
  if(mot1!=0 && mot2!=0)
  {
    double latitude;
    double longitude;
      
    latitude = atof(lat1);
    longitude = atof(lng2);

    float latitude1 = latitude/100;
    int latitude1a = latitude1;        
    float longitude1 = longitude/100;
    int longitude1a = longitude1;        
    float latitude2 = (latitude1 - latitude1a)*60;
    int latitude2a = latitude2;      
    float latitude3 = (latitude2 - latitude2a)*60;
    float latitude3a = latitude3;
    float longitude2 = (longitude1 - longitude1a)*60;
    int longitude2a = longitude2;      
    float longitude3 = (longitude2 - longitude2a)*60;
    float longitude3a = longitude3;
    float lg[2];
    float la[2];
    for(int i=0; i<2; i++)
    {
      lg[i]=longitude1;
      la[i]=latitude1;
      delay(1000);
    }
    
    float M = (60*acos( sin(la[0]) * sin(la[1]) + cos(la[0]) * cos(la[1]) * cos(lg[1] - lg[0]) )*1842);



      Serial.println("Coordonnées GPS:");
      Serial.println();  
      Serial.println("          Latitude       ;      Longitude");
      Serial.print("DD:    ");
      Serial.print(latitude1,9);
      Serial.print("     ;     ");
      Serial.print(longitude1,9);
      Serial.println();
      Serial.print("DMS:   ");
      Serial.print(latitude1a);
      Serial.print("°");
      Serial.print(latitude2a);
      Serial.print("'");
      Serial.print(latitude3a);
      Serial.print("''");
      Serial.print("     ;     ");
      Serial.print(longitude1a);
      Serial.print("°");
      Serial.print(longitude2a);
      Serial.print("'");
      Serial.print(longitude3a);
      Serial.print("''");
      Serial.println();
      Serial.println();
      Serial.print("Vitesse:");
      Serial.print(M);        
      Serial.println("m/s");
      Serial.println();
      Serial.println("----------------------------------");
      delay(1000);

  }
}
 





    if (Serial.available())                
    gps.write(Serial.read());  
    clearLat1Array();
    mot1=0;
    clearLng2Array();
    mot2=0;    
}


void clearBufferArray()                    
{
    for (int i=0; i<count;i++)
    {
        buffer[i]=NULL;
    }                      
}

void clearLat1Array()                    
{
    for (int i=0; i<mot1;i++)
    {
        lat1[i]=NULL;
    }                      
}

void clearLng2Array()                    
{
    for (int i=0; i<mot2;i++)
    {
        lng2[i]=NULL;
    }                      
}

 
J'ai réussit à isoler la partie qui m'intéressait et réussit à faire des calculs avec.
J'obtiens comme résultat quelque chose comme ceci: https://ibb.co/94cZxwV

C'est à partir de là que j'ai un problème, je souhaite recevoir ces informations sur mon téléphone, j'ai donc installé un Port Série Bluetooth (HC-05 et comme application sur téléphone "Bluetooth Terminal HC-05") et quelques lignes sur mon programme pour les recevoir.

Code: [Select]


SoftwareSerial BTSerial(2, 3);



                              
void setup()
{


    
    
    boolean NL = true;
               
    
    BTSerial.begin(9600);
    
                        
}

void loop()
{
      BTSerial.println("Coordonnées GPS:");
      BTSerial.println();
      BTSerial.print("Latitude:");
      BTSerial.print(latitude1,8);
      BTSerial.print("   ;   ");
      BTSerial.print("Longitude:");
      BTSerial.print(longitude1,8);
      BTSerial.println();
      BTSerial.println();
      BTSerial.print("Latitude:");
      BTSerial.print(latitude1a);
      BTSerial.print("°");
      BTSerial.print(latitude2a);
      BTSerial.print("'");
      BTSerial.print(latitude3a, 4);
      BTSerial.print("''");
      BTSerial.print("    ;    ");
      BTSerial.print("Longitude:");
      BTSerial.print(longitude1a);
      BTSerial.print("°");
      BTSerial.print(longitude2a);
      BTSerial.print("'");
      BTSerial.print(longitude3a);
      BTSerial.print("''");
      BTSerial.println();
      BTSerial.println();
      BTSerial.print("Vitesse: ");
      BTSerial.print(M);
      BTSerial.println("m/s");
      BTSerial.println();
}



Mon programme est le même qu'avant avec ces lignes en plus
Quand je rentre ces commandes plus rien ne marche dans mon programme, je peux le téléverser et le vérifier, aucuns messages d'erreur ne s'affiche mais mon depuis le Port Série du PC je ne reçois aucunes données ni sur mon téléphone.
J'utilise aussi un Port Série Bluetooth pour un autre programme avec les mêmes lignes que j'ai rajouté et je reçois bien les données que je veux sur mon téléphone.

Si quelqu'un saurait comment résoudre ce problème je suis preneur.

Merci, bonne soirée

J-M-L

#1
Mar 25, 2019, 02:02 am Last Edit: Mar 25, 2019, 02:02 am by J-M-L
Deux Software Serial... ça met de la pression sur votre arduino... (même si un en lecture et l'autre qu'en écriture)  si vous envisagez un fonctionnement déconnecté du pc, mettez le BT sur Le port hardware serial (0 et 1) mais faudra le débrancher lors des uploads
Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

Endown


Go Up