Saša Radosavljevic / Mbed 2 deprecated Lecture_os_2

Dependencies:   mbed

Revision:
4:4160376d7d69
Parent:
3:ac6eead48a9d
Child:
5:d65b158dd93d
--- a/main.cpp	Fri Feb 28 11:43:14 2020 +0000
+++ b/main.cpp	Thu May 07 09:57:06 2020 +0000
@@ -2,43 +2,127 @@
 
 //AX12 myax12 (PC_4, PC_5, 1,115200);
 Serial myserial_ax12(PC_4,PC_5,115200);
-char tata[10];
-int position;
-Ticker fonction_10ms;
+Serial pc(USBTX,USBRX,115200);
+Serial zigBee(PC_1,PC_0,115200); 
+
+
+DigitalOut my_led1(LED1);
+DigitalOut my_led2(LED2);
+DigitalOut my_led3(LED3);
 
+char tata[20] = {};
+int position_1;
+int position_2;
+int position_3;
+int vitesse;
+char sens;
+
+Ticker ticker_10ms;
+
+//Définition des trames de requête pour le moteur 1
+char trame_demande_pos_1[8]={0xFF,0xFF,0x01,0x4,0x2,0x24,2,0xD2};
+char trame_demande_pos_2[8]={0xFF,0xFF,0x02,0x4,0x2,0x24,2,0xD1};
+char trame_demande_pos_3[8]={0xFF,0xFF,0x03,0x4,0x2,0x24,2,0xD0};
+char trame_demande_vitesse[8]={0xFF,0xFF,0x01,0x4,0x2,0x28,2,0xCE};
+
+
+#define acq_vitesse 0
+#define acq_position 1
+
+//Fonction d'interruption sur réception de charactère sur liaison série
 void Rx_Irq_fonction(void)
 {
-    static int i_rx;
+    my_led1 = !my_led1;
+    
+    static int i_rx=0;
     tata[i_rx]=myserial_ax12.getc();
-    if (tata[0]!=0xFF) 
+    
+    if (tata[0]!=0xFF)                                                          // On vérifie que le premier et le deuxième octet sont biens 0xFF
         i_rx=0;
     else i_rx++;
+    if((i_rx==2)&&(tata[1] != 0xFF)) i_rx=0;
+    
+//Une fois qu'on sait que la trame est "juste" on récupère le reste
     if ((tata[0]==0xFF) && (tata[1]==0xFF) && (tata[2]==0x01) && i_rx==7)
     {
+        my_led3 = !my_led3;
+
         i_rx=0;
-        if(tata[4]==00) //si erreur  est nulle
-            position = tata[5]+((uint16_t)tata[6]<<8);
+        if(tata[4]==00){ //si erreur  est nulle
+        
+            //On transforme les données en fonction de ce qu'on lit depuis les moteurs
+            if (acq_position == 1) position_1 = tata[5]+((uint16_t)tata[6]<<8);
+            /*if (acq_vitesse == 1){
+                sens = ((tata[5]+((uint16_t)tata[6]<<8))&0x40)>>10;
+                vitesse = tata[5]+((uint16_t)tata[6]<<8);
+            }*/
+        }
         tata[0]=0;
     }
-    if (i_rx>9)
+    
+    if ((tata[0]==0xFF) && (tata[1]==0xFF) && (tata[2]==0x02) && i_rx==7)
+    {
+        my_led3 = !my_led3;
+
+        i_rx=0;
+        if(tata[4]==00){ //si erreur  est nulle
+        
+            //On transforme les données en fonction de ce qu'on lit depuis les moteurs
+            if (acq_position == 1) position_2 = tata[5]+((uint16_t)tata[6]<<8);
+            /*if (acq_vitesse == 1){
+                sens = ((tata[5]+((uint16_t)tata[6]<<8))&0x40)>>10;
+                vitesse = tata[5]+((uint16_t)tata[6]<<8);
+            }*/
+        }
+        tata[0]=0;
+    }
+    
+    if ((tata[0]==0xFF) && (tata[1]==0xFF) && (tata[2]==0x03) && i_rx==7)
     {
-        for(int i=0;i<10;i++)
-            tata[i]=0;
+        my_led3 = !my_led3;
+
+        i_rx=0;
+        if(tata[4]==00){ //si erreur  est nulle
+        
+            //On transforme les données en fonction de ce qu'on lit depuis les moteurs
+            if (acq_position == 1) position_3 = tata[5]+((uint16_t)tata[6]<<8);
+            /*if (acq_vitesse == 1){
+                sens = ((tata[5]+((uint16_t)tata[6]<<8))&0x40)>>10;
+                vitesse = tata[5]+((uint16_t)tata[6]<<8);
+            }*/
+        }
+        tata[0]=0;
+    }
+    
+    if (i_rx>19)
+    {
+        /*for(int i=0;i<10;i++)
+            tata[i]=0;*/
         i_rx=0;
     }
 }
 
 void fonction_10ms(void)
 {
-    for(i=0;i<=7;i++)
+    for(int i=0;i<=19;i++)
+    {
+        pc.printf("%X ",tata[i]);
+    }
+    pc.printf("\n\r");
+    for(int i=0;i<=7;i++)
     {
-       myserial_ax12.putc(trame_demande_pos[i]);
+       //On envoi la trame que l'on souhaite
+        if(acq_position)myserial_ax12.putc(trame_demande_pos[i]);
+        if(acq_vitesse){
+            myserial_ax12.putc(trame_demande_vitesse[i]);
+            //pc.printf("\n\rvitesse = %d\n\rsens = %d",vitesse,sens);
+        }
     }
 }
 
 int main(){
     //myax12.SetMode(1); //passage en Continuous rotation
-    char trame_demande_pos[8]={0xFF,0xFF,0x01,0x4,0x2,0x24,2,0xD2};
+
     char trame_cmd_speed[9]={0xFF,0xFF,0x01,0x5,0x3,0x20,0x10,0x0,0xC6};
     float Angle;
     short speed;
@@ -47,40 +131,44 @@
     float temp;
     int position_old=0,i,a;
     
+    pc.printf("test lecture AX12\n\r");
+    
     //myax12.SetCRSpeed(0.05);
-    
     for(i=0;i<=8;i++)
     {
         myserial_ax12.putc(trame_cmd_speed[i]);
     }
     
-    for(i=0;i<=7;i++)
-    {
-        myserial_ax12.putc(trame_demande_pos[i]);
-    }
     myserial_ax12.attach(&Rx_Irq_fonction, Serial::RxIrq);
+    ticker_10ms.attach(&fonction_10ms,1);
         
 
     while(1) {
-        if (position != position_old)
-        {   
-            printf("\n\rposition = %d\n\r mot recu :",position);    
-            for(i=0;i<=7;i++)
-            {
-                printf("%X ",tata[i]);
+       
+        if(acq_position == 1){
+            if (position != position_old)
+            {   
+                my_led2 = !my_led2;
+                
+                pc.printf("\n\rposition moteur 1  = %d :", position_1);
+                pc.printf("\n\rposition moteur 2  = %d :", position_2);
+                pc.printf("\n\rposition moteur 3  = %d :", position_3);
+                //pc.printf("\n\rposition moteur 1  = %d\n\r mot recu :",position_1);    
+                
+                /*for(i=0;i<=7;i++)
+                {
+                    pc.printf("%X ",tata[i]);
+                }*/
+                position_old=position;
             }
-            position_old=position;
         }
-        wait(0.01);
-        a++;
-        if(!(a % 20))
-            
-    }
+
+    }       
     
 }
 
-void set_speed(ID,speed)
-void demande_lecture_pos(ID)
+//void set_speed(ID,speed)
+//void demande_lecture_pos(ID)
 
 
 /*