Projet / Mbed 2 deprecated progprincipale

Dependencies:   mbed AX12

Files at this revision

API Documentation at this revision

Comitter:
Cointepas
Date:
Wed Jun 07 18:26:34 2017 +0000
Parent:
1:87582f792133
Commit message:
final;

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
diff -r 87582f792133 -r 62ccfb1a8e17 main.cpp
--- a/main.cpp	Sat May 27 16:20:06 2017 +0000
+++ b/main.cpp	Wed Jun 07 18:26:34 2017 +0000
@@ -5,6 +5,13 @@
 #include <sstream>
 
 
+using namespace std;
+
+DigitalOut led1(LED1);
+DigitalOut led2(LED2);
+DigitalOut led3(LED3);
+DigitalOut led4(LED4);
+
 /* ************************************************************ */
 /* Déclarations variables globales et fonctions pour HMC5883L   */
 /* ************************************************************ */
@@ -15,44 +22,72 @@
 void hmc_config(void);
 void hmc_lecture(void);
 
-/* ********************************************* */
-/*  Déclarations des var globales moteur         */
+/* ************************************************** */
+/*  Déclarations des var globales de communication    */
+/* ************************************************** */
+Serial conf(p9, p10);
+Serial pc(USBTX, USBRX);
+
 /* ********************************************* */
-DigitalOut led1(LED1);
-DigitalOut led2(LED2);
-DigitalOut led3(LED3);
-
-Serial conf(p13, p14, 9600); //(tx, rx, baud)
-AX12 myax01 (p9, p10, 1);
-AX12 myax02 (p9, p10, 2);
-AX12 myax06 (p9, p10, 6);
-
+/*  Déclarations des var globales de position    */
+/* ********************************************* */
 int moteur1i;
 int moteur2i;
 int moteur3i;
 
-int checkmot1;
-int checkmot2;
-int checkmot3;
+/* ********************************************* */
+/*  Déclarations des var globales de position    */
+/* ********************************************* */
+bool flag;
 
-void lecture_12octets(void);
+/* ********************************************* */
+/*  Déclarations des var globales moteur         */
+/* ********************************************* */
+AX12 myax01 (p28, p27, 1);
+AX12 myax02 (p28, p27, 2);
+AX12 myax03 (p28, p27, 3);
+AX12 myax04 (p28, p27, 6);
+
+/* ********************************************* */
+/*  Déclarations des var globales des relever de position         */
+/* ********************************************* */
+float checkmot1;
+float checkmot2;
+float checkmot3;
+float checkmot4;
+
+void Lecture(void);
 void envoi_position(void);
 void lecture_position(void);
 void envoi_12octets(void);
 
+
 int main() 
 { 
-    
-       lecture_12octets();
+       led1 = 1;
+       Lecture();
+       led1 = 0;
+       led2 = 1;
        envoi_position();
+       led2 = 0;
+       led3 = 1;
        hmc_config();
+       led3 = 0;
+       led4 = 1;
        hmc_lecture();
+       led4 = 1;
+       led1 = 1;
        lecture_position();
+       led1 = 0;
+       led2 = 1;
        envoi_12octets();
-       
+       led1 = 1;
+       led2 = 1;
+       led3 = 1;
+       led4 = 1;
                
     
-            pc.printf("\nBx=%d, By=%d, Bz=%d\n\r",Bx*4.35,By*4.35,Bz*4.35);
+           // pc.printf("\nBx=%d, By=%d, Bz=%d\n\r",Bx*4.35,By*4.35,Bz*4.35);
            
            
          
@@ -66,6 +101,7 @@
 /* ************************************** */
 void hmc_config(void)
      {
+         conf.baud(9600);
          //Variable interne à la fonction.
          char config_hmc[2];
          config_hmc[0]=0x00;  // adresse registre A
@@ -103,88 +139,105 @@
         wait(0.07);    
           
       }    
-      
+   /* *********************************************  */
+  /*        Fonction de lecture de la trame         */
   /* *********************************************  */
-  /* Fonction de lecture de la trame sur 12 Octets  */
-  /* *********************************************  */ 
-  
-  void lecture_12octets(void)
-{
-    //Variable interne a la fonction.
+
+void Lecture(void) {
+    
     string trame;        //Trame complète.
     stringstream sstr;   //stringstream permet de faire la liaison entre le string de départ et le int sortant.
-    int cchecksum;       //Octet permetant le controle de 'checksumi'.
-    string start1;       //Octet de start.
-    int start1i;         //'start1' converti en int.
-    string start2;       //Octet de start.
-    int start2i;         //'start2' converti en int.
+    int cchecksum = 0;       //Octet permetant le controle de 'checksumi'.
     string moteur1;      //Octet de position moteur1.
     string moteur2;      //Octet de position moteur2.
     string moteur3;      //Octet de position moteur3.
     string checksum;     //Octet du checksum.
     int checksumi;       //'checksum' converti en int.
-    char tablecture[7];  //Tableau de reception
-
-    led1 = 1;
-    conf.gets(tablecture, 12);    //Récupère la trame complète sur 12 Octets dans un trableau de char.
-    ttrame = tablecture;         //Copie le contenue de 'tablecture' dans 'trame'.
-    wait (2.0);
-    led1 = 0;
-    led2 = 1;
+    char tablecture[15];  //Tableau de reception
+    char reception[1];
+    int tablecturei[15];  //Tableau de reception converti en int
+    string tab;       //Octet de start.
+    int tabi[14];         //'start1' converti en int.
+    string start1;       //Octet de start.
+    int start1i;         //'start1' converti en int.
+    string start2;       //Octet de start.
+    int start2i;         //'start2' converti en int.
+    string start3;       //Octet de start.
+    int start3i;         //'start1' converti en int.
+    string start4;       //Octet de start.
+    int start4i;         //'start2' converti en int.
+    conf.baud(9600);
+    
+    
+    //tablecture = conf.getc();
     
-    start1 = trame.substr(0,2); //Enregistrement de deux Nombres à partir de 0.
-    sstr << start1; //Stock le contenue du string 'start1' dans le buffer 'sstr'.
-    sstr >> dec >> start1i; //Enregistre le contenue du buffer 'sstr' en hexa dans l'int 'start1i'.
-    sstr.clear();   //Vide le buffer de 'sstr'.
+    for(int i = 0; i<15; i++){
+       conf.gets(reception, 2);
+       pc.printf("\nreception = %s \n",reception);
+       trame += reception;
+       //tablecture[i] = conf.getc();    //Récupère la trame complète sur 15 Octets dans un trableau de char.
+       //conf.scanf("%d", &tablecture[i]);
+       //pc.printf("\ntablecture[%d] = %s \n",i,tablecture[i]);
+       //pc.printf("\ntablecturei[%d] = %d \n",i,tablecturei[i]);
+       //trame = tablecture[i];
+    }
     
-    start2 = trame.substr(2,2); //Enregistrement de deux Nombres à partir de 2.
-    sstr << start2; //Stock le contenue du string 'start2' dans le buffer 'sstr'.
-    sstr >> dec >> start2i; //Enregistre le contenue du buffer 'sstr' en hexa dans l'int 'start2i'.
-    sstr.clear();   //Vide le buffer de 'sstr'.
+    //trame = tablecture;         //Copie le contenue de 'tablecture' dans 'trame'.
+    pc.printf("\ntrame = %s \n",trame);
+    led1 = 1;
     
-    moteur1 = trame.substr(4,2); //Enregistrement de deux Nombres à partir de 4.
+    for(int i=0; i<13; i++){
+        tab = trame.substr(i,1);
+        tabi[i] = tab[0];
+        cchecksum += tabi[i];
+        pc.printf("\ntab[%d] = %s \n", i, tab);
+        pc.printf("\ntabi[%d] = %d \n", i, tabi[i]);
+        pc.printf("\ncchecksum = %d \n",cchecksum);
+        }
+        
+    pc.printf("\ncchecksum = %d \n",cchecksum);
+    moteur1 = trame.substr(4,3); //Enregistrement de deux Nombres à partir de 4.
     sstr << moteur1; //Stock le contenue du string 'start2' dans le buffer 'sstr'.
     sstr >> dec >> moteur1i; //Enregistre le contenue du buffer 'sstr' en hexa dans l'int 'start2i'.
     sstr.clear();   //Vide le buffer de 'sstr'.
+    pc.printf("\nmoteur1 = %s \n",moteur1);
+    pc.printf("\nmoteur1i = %d \n",moteur1i);
     
-    moteur2 = trame.substr(6,2); //Enregistrement de deux Nombres à partir de 6.
+    moteur2 = trame.substr(7,3); //Enregistrement de deux Nombres à partir de 6.
     sstr << moteur2;             //Stock le contenue du string 'start2' dans le buffer 'sstr'.
     sstr >> dec >> moteur2i;     //Enregistre le contenue du buffer 'sstr' en hexa dans l'int 'start2i'.
     sstr.clear();   //Vide le buffer de 'sstr'.
+    pc.printf("\nmoteur2 = %s \n",moteur2);
+    pc.printf("\nmoteur2i = %d \n",moteur2i);
     
-    moteur3 = trame.substr(8,2); //Enregistrement de deux Nombres à partir de 8.
+    moteur3 = trame.substr(10,3); //Enregistrement de deux Nombres à partir de 8.
     sstr << moteur3;             //Stock le contenue du string 'start2' dans le buffer 'sstr'.
     sstr >> dec >> moteur3i;     //Enregistre le contenue du buffer 'sstr' en hexa dans l'int 'start2i'.
     sstr.clear();                //Vide le buffer de 'sstr'.
     led2 = 0;
+    pc.printf("\nmoteur3 = %s \n",moteur3);
+    pc.printf("\nmoteur3i = %d \n",moteur3i);
     
-    checksum = trame.substr(10,2);   //Enregistrement de deux Nombres à partir de 10.
+    checksum = trame.substr(13,2);   //Enregistrement de deux Nombres à partir de 10.
     sstr << checksum;                //Stock le contenue du string 'checksum' dans le buffer 'sstr'.
     sstr >> dec >> checksumi;        //Enregistre le contenue du buffer 'sstr' en hexa dans l'int 'checksumi'.
     sstr.clear();                    //Vide le buffer de 'sstr'.
+    pc.printf("\nchecksum = %s \n",checksum); 
+    pc.printf("\nchecksumi = %d \n",checksumi);                  
     
-    cchecksum = start1i + start2i + moteur1i + moteur2i + moteur3i;    //Additionne les valeurs et les enregistres dans 'vhecksum'.
+    cchecksum = cchecksum % 256;    //'cchecksum' % 256.
+    pc.printf("\ncchecksum = %d modulo 256\n",cchecksum);
+    cchecksum = cchecksum % 100;    //'cchecksum' % 100.
+    pc.printf("\ncchecksum = %d modulo 100\n",cchecksum);
     
     
-    wait (0.5);
-    led3 = 1;
- 
-    if((cchecksum ) == checksumi){    //Si le calcul du 'vhecksum' est égale a "checksumi"
-        //cout << "Trame valide" << endl;     //Trame validé.
-         for(int d = 0; d<10; d++){
-            led1 = 1;
-            wait (4.0);
-            }
+    if((cchecksum) == checksumi){   
+        led2 = 1;
+        flag = 1;
     }
     else{
-        //cout << "Error 01-checksum attendu '" << hex << uppercase << (vhecksum & 0xFF) << "'" << endl;  //Trame fausse.
-        while(1){
-            led2 = 1;
-            led3 = 1;
-            wait (2.0);
-            led3 = 0;
-            wait (2.0);
-            }
+        led3 = 1;
+        flag = 0;
     }
 }
 
@@ -192,30 +245,38 @@
   /*       Fonction d'envoi de position moteur      */
   /* *********************************************  */
   
-  void envoi_position(void){
-      myax01.SetGoal(moteur1i);    // go to 100 degrees
-      myax02.SetGoal(moteur2i);
-      myax06.SetGoal(moteur3i);
-      }
+void envoi_position(void){
+    int moteur4i;
+    myax01.SetGoal(moteur1i);     //Va a la position 'moteur1i'.
+    wait(0.25);                   //Attente de 0.25sec avant de commencer a placer le moteur suivant.
+    myax02.SetGoal(moteur2i);     //Va a la position 'moteur2i'.
+    wait(0.25);                   //Attente de 0.25sec avant de commencer a placer le moteur suivant.
+    myax03.SetGoal(moteur3i);     //Va a la position 'moteur3i'.
+    moteur4i = 300 - moteur3i;    //Calcul pour la position du moteur myax03.SetGoal.
+    myax04.SetGoal(moteur4i);     //Va a la position 'moteur4i'.
+    wait(3);
+    }
       
   /* *********************************************  */
   /*      Fonction de lecture de position moteur    */
   /* *********************************************  */
   
-  void lecture_position(void){
-      checkmot1 = myax01.GetGoal(); 
-      checkmot2 = myax02.GetGoal();
-      checkmot3 = myax06.GetGoal();
-      }
-      
+void lecture_position(void){
+    checkmot1 = myax01.GetPosition(); //Récupération de la position du moteur 'myax01'.
+    checkmot2 = myax02.GetPosition(); //Récupération de la position du moteur 'myax02'.
+    checkmot3 = myax03.GetPosition(); //Récupération de la position du moteur 'myax03'.
+    checkmot4 = myax04.GetPosition(); //Récupération de la position du moteur 'myax04'.
+    }
   /* *********************************************  */
   /*   Fonction d'envoi de la trame sur 12 Octets   */
   /* *********************************************  */
 void envoi_12octets(void){
+    Serial conf(p13, p14); //(tx, rx, baud)
     //Varible interne a la fonction
     int start3 = 0xFF;  //Octet de start
     int start4 = 0xFF;  //Octet de start
     int echecksum;      //Octet de Checksum
+    conf.baud(9600);
     
     
     led1 = 0;
diff -r 87582f792133 -r 62ccfb1a8e17 mbed.bld
--- a/mbed.bld	Sat May 27 16:20:06 2017 +0000
+++ b/mbed.bld	Wed Jun 07 18:26:34 2017 +0000
@@ -1,1 +1,1 @@
-https://mbed.org/users/mbed_official/code/mbed/builds/4eea097334d6
\ No newline at end of file
+http://mbed.org/users/mbed_official/code/mbed/builds/63bcd7ba4912