Articles les plus consultés

mardi 16 octobre 2018

Programme Arduino pour calcul de Cap

Suite au programme de test convainquant sous Processing, le voici à la sauce Arduino:
Comme indiqué, il faut entrer les valeurs dans les 8 premières variables...


int LatDepart = 473771;
char DirectionLatDepart = 'N';
int LongDepart = 37082;
char DirectionLongDepart = 'E';

int LatArrive = 479027;
char DirectionLatArrive = 'N';
int LongArrive = 19057;
char DirectionLongArrive = 'E';

char Tendance1 = 'A'; // pour Nord ou Sud 
char Tendance2 = 'A'; // pour Est ou West
float DimensionRectangleLatitudeDegres = 0.3;
float DimensionRectangleLongitudeDegres = 0.3;
float DimensionRectangleLatitudeMetres = 0.3;
float DimensionRectangleLongitudeMetres = 0.3;
float DimensionRectanglePourcent = 025.03;
int DegresBase = 0;
int Cap =0;
void setup() {
  Serial.begin(9600);
  Serial.println ("Connection OK!..");
  Serial.print ("Calculateur de Cap");
  Serial.println ("Entrer valeurs en INT dans les 8 premières variables");
}

void loop() {
DetectionDirectionLatitude (); 
 DetectionDirectionLongitude ();
 DefinitionRectanglePourcent ();
 DefinitionRectangleDegres ();
 DefinitionCap ();
}
void DetectionDirectionLatitude (){
if ((LatDepart > LatArrive) && (DirectionLatDepart == 'N') && (DirectionLatArrive == 'N')){
  Tendance1 = 'S';
  DimensionRectangleLatitudeDegres = LatDepart - LatArrive;
}
if ((LatDepart > LatArrive) && (DirectionLatDepart == 'S') && (DirectionLatArrive == 'S')){
  Tendance1 = 'N';
   DimensionRectangleLatitudeDegres = LatDepart - LatArrive;
}
if ((LatDepart < LatArrive) && (DirectionLatDepart == 'N') && (DirectionLatArrive == 'N')){
  Tendance1 = 'N';
   DimensionRectangleLatitudeDegres = LatArrive - LatDepart;
}
if ((LatDepart < LatArrive) && (DirectionLatDepart == 'S') && (DirectionLatArrive == 'S')){
  Tendance1 = 'S';
  DimensionRectangleLatitudeDegres = LatArrive - LatDepart;
}
if  (DirectionLatDepart != DirectionLatArrive){
  Tendance1 = DirectionLatArrive;
   DimensionRectangleLatitudeDegres = LatDepart + LatArrive;
}
 DimensionRectangleLatitudeMetres = DimensionRectangleLatitudeDegres * 111730;
} 
void DetectionDirectionLongitude (){
if ((LongDepart > LongArrive) && (DirectionLongDepart == 'E') && (DirectionLongArrive == 'E')){
  Tendance2 = 'W';
  DimensionRectangleLongitudeDegres = LongDepart - LongArrive;
}
if ((LongDepart > LongArrive) && (DirectionLongDepart == 'W') && (DirectionLongArrive == 'W')){
  Tendance2 = 'E';
  DimensionRectangleLongitudeDegres = LongDepart - LongArrive;
}
if ((LongDepart < LongArrive) && (DirectionLongDepart == 'E') && (DirectionLongArrive == 'E')){
  Tendance2 = 'E';
  DimensionRectangleLongitudeDegres = LongArrive - LongDepart;
}
if ((LongDepart < LongArrive) && (DirectionLongDepart == 'W') && (DirectionLongArrive == 'W')){
  Tendance2 = 'W';
   DimensionRectangleLongitudeDegres = LongArrive - LongDepart;
}
if  (DirectionLongDepart != DirectionLongArrive){
  Tendance2 = DirectionLongArrive;
  DimensionRectangleLongitudeDegres = LongDepart + LongArrive;
}
DimensionRectangleLongitudeMetres = DimensionRectangleLongitudeDegres * 75840;
  Serial.print ("Tendance  =    ");
  Serial.print (Tendance1);
  Serial.print (",");
  Serial.println (Tendance2);
  
   Serial.print ("  Dimension Rectangle Latitude en Degres =   ");
   Serial.println (DimensionRectangleLatitudeDegres);
   Serial.print ("                               en metres =   ");
   Serial.println (DimensionRectangleLatitudeMetres);
   Serial.print ("  Dimension Rectangle Longitude en Degres =  ");
   Serial.println (DimensionRectangleLongitudeDegres);
   Serial.print ("                               en metres =   ");
   Serial.println (DimensionRectangleLongitudeMetres);
} 
//-----------------------------------------------------------------------------------------------------
void DefinitionRectanglePourcent (){
  if (DimensionRectangleLatitudeMetres > DimensionRectangleLongitudeMetres ){
    DimensionRectanglePourcent = (100 * DimensionRectangleLongitudeMetres) / DimensionRectangleLatitudeMetres;
}
 if (DimensionRectangleLatitudeMetres < DimensionRectangleLongitudeMetres ){
    DimensionRectanglePourcent = (100 * DimensionRectangleLatitudeMetres) / DimensionRectangleLongitudeMetres;
 }
   Serial.print("                               en pourcent =   ");
   Serial.print (DimensionRectanglePourcent);
   Serial.println ("  %");
}
void DefinitionRectangleDegres (){
  if (DimensionRectanglePourcent <= 5.241){
    DegresBase = 0;
  }
  if (DimensionRectanglePourcent > 5.241){
    DegresBase = 3;
  }
   if (DimensionRectanglePourcent > 9){
    DegresBase = 6;
  }
   if (DimensionRectanglePourcent > 12){
    DegresBase = 9;
  }
   if (DimensionRectanglePourcent > 20){
    DegresBase = 12;
  }
   if (DimensionRectanglePourcent > 24){
    DegresBase = 15;
  }
   if (DimensionRectanglePourcent > 30){
    DegresBase = 18;
  }
   if (DimensionRectanglePourcent > 35){
    DegresBase = 21;
  }
   if (DimensionRectanglePourcent > 42){
    DegresBase = 24;
  }
   if (DimensionRectanglePourcent > 48){
    DegresBase = 27;
  }
   if (DimensionRectanglePourcent > 55){
    DegresBase = 30;
  }
   if (DimensionRectanglePourcent > 62){
    DegresBase = 33;
  }
   if (DimensionRectanglePourcent >70){
    DegresBase = 36;
  }
   if (DimensionRectanglePourcent > 78){
    DegresBase = 39;
  }
   if (DimensionRectanglePourcent > 88){
    DegresBase = 42;
  }
   if (DimensionRectanglePourcent > 93){
    DegresBase = 45;
  }
 Serial.print ("Degres de base  =    ");
 Serial.print (DegresBase);
 Serial.println ("   degres");   
}
void DefinitionCap () { 
  if  ((Tendance1== 'N') && (Tendance2 == 'E') && (DimensionRectangleLongitudeDegres < DimensionRectangleLatitudeDegres)){
  Cap = DegresBase;
}
if  ((Tendance1== 'N') && (Tendance2 == 'E') && (DimensionRectangleLongitudeDegres > DimensionRectangleLatitudeDegres)){
  Cap = 90 - DegresBase;
}
 if  ((Tendance1== 'S') && (Tendance2 == 'E') && (DimensionRectangleLongitudeDegres < DimensionRectangleLatitudeDegres)){
  Cap = 180 - DegresBase;
}
if  ((Tendance1== 'S') && (Tendance2 == 'E') && (DimensionRectangleLongitudeDegres > DimensionRectangleLatitudeDegres)){
  Cap = 90 + DegresBase;
}
 if  ((Tendance1== 'S') && (Tendance2 == 'W') && (DimensionRectangleLongitudeDegres < DimensionRectangleLatitudeDegres)){
  Cap = 180 + DegresBase;
}
if  ((Tendance1== 'S') && (Tendance2 == 'W') && (DimensionRectangleLongitudeDegres > DimensionRectangleLatitudeDegres)){
  Cap = 270 - DegresBase;
}
 if  ((Tendance1== 'N') && (Tendance2 == 'W') && (DimensionRectangleLongitudeDegres < DimensionRectangleLatitudeDegres)){
  Cap = 360 - DegresBase;
}
if  ((Tendance1== 'N') && (Tendance2 == 'W') && (DimensionRectangleLongitudeDegres > DimensionRectangleLatitudeDegres)){
  Cap = 270 + DegresBase;
}
 Serial.print ("CAP a suivre =  ");
 Serial.println (Cap);     
}


Faites vous-même vos essais...
Dans le programme final, les paramètres de départ sont remplacés par les paramètres de route envoyés par le GPS

Aucun commentaire:

Enregistrer un commentaire