Programme de contrôle de l'octopode 4DOF, Theraphosa-Salconi.

Dependencies:   debug mbed

CtrlBridge

  • fonction quelquonque pour communiquer avec les module
  • fonction quelquonque pour faire des recherche dans les module dispo
  • autre fonction pour jouer avec MemRegistre

Version 1.2.0

  • Ajout d'un mode de simulation pour tester le code avec seulement un contrôleur stm32
Revision:
27:ea60d12dccdf
Parent:
19:0ac80045ba4c
Child:
36:474d4795aafa
diff -r 15cb45d56c28 -r ea60d12dccdf source/Motrice/Patte.h
--- a/source/Motrice/Patte.h	Mon May 11 13:48:38 2015 +0000
+++ b/source/Motrice/Patte.h	Thu May 14 21:40:23 2015 +0000
@@ -14,6 +14,7 @@
 
 //#include <string>
 #include <stdio.h>
+//#include "debug.h"
 
 struct servo_t {
     char iD; //use for ssc-32
@@ -38,52 +39,87 @@
     servo_t m_Tibia;
     servo_t m_Tars;
     char buffer [50];
-    
+    bool valuesChange;
+    bool valuesCoxaChange;
+    bool valuesFemurChange;
+    bool valuesTibiaChange;
+    bool valuesTarsChange;
+
 public:
     Patte(char patteId,char coxaId,char femurId,char tibiaId,char tarsId) {
         m_id = patteId;
+        valuesChange = false;
 
         m_Coxa.iD  = coxaId;
         m_Coxa.max = DEFAULTMAX;
         m_Coxa.min = DEFAULTMIN;
         m_Coxa.curr= DEFAULTPOSITION;
+        valuesCoxaChange = false;
 
         m_Femur.iD  = femurId;
         m_Femur.max = DEFAULTMAX;
         m_Femur.min = DEFAULTMIN;
         m_Femur.curr= DEFAULTPOSITION;
+        valuesFemurChange = false;
 
         m_Tibia.iD  = tibiaId;
         m_Tibia.max = DEFAULTMAX;
         m_Tibia.min = DEFAULTMIN;
         m_Tibia.curr= DEFAULTPOSITION;
+        valuesTibiaChange = false;
 
         m_Tars.iD  = tarsId;
         m_Tars.max = DEFAULTMAX;
         m_Tars.min = DEFAULTMIN;
         m_Tars.curr= DEFAULTPOSITION;
+        valuesTarsChange = false;
     }
-    virtual ~Patte(){}
+    virtual ~Patte() {}
     char id(void) {
         return m_id;
     }
-    const char* toString(void){
-       
-       sprintf (buffer,"#%d P%d0 #%d P%d0 #%d P%d0 #%d P%d0",m_Coxa.iD,m_Coxa.curr,m_Femur.iD,m_Femur.curr,m_Tibia.iD,m_Tibia.curr,m_Tars.iD,m_Tars.curr);
-       return buffer;
-        }
+    const char* toString(void) {
+        char buffer1[50]= {""};
+        char buffer2[50]= {""};
+        char buffer3[50]= {""};
+        char buffer4[50]= {""};
+        for(int i=0;i<50;i++)buffer[i]=0;
+        
+        if(valuesCoxaChange)
+            sprintf (buffer1,"#%d P%d0 ",m_Coxa.iD,m_Coxa.curr);
+        if(valuesFemurChange)
+            sprintf (buffer2,"#%d P%d0 ",m_Femur.iD,m_Femur.curr);
+        if(valuesTibiaChange)
+            sprintf (buffer3,"#%d P%d0 ",m_Tibia.iD,m_Tibia.curr);
+        if(valuesTarsChange)
+            sprintf (buffer4,"#%d P%d0",m_Tars.iD,m_Tars.curr);
+        //sprintf (buffer,"#%d P%d0 #%d P%d0 #%d P%d0 #%d P%d0",m_Coxa.iD,m_Coxa.curr,m_Femur.iD,m_Femur.curr,m_Tibia.iD,m_Tibia.curr,m_Tars.iD,m_Tars.curr);
+        sprintf (buffer,"%s%s%s%s",buffer1,buffer2,buffer3,buffer4);
+        //debug(1,"\n\n\rintern string %s",buffer);
+        
+        return buffer;
+    }
+    bool haveChange() {
+        bool result = valuesChange|valuesCoxaChange|valuesFemurChange|valuesTibiaChange|valuesTarsChange;
+        if(valuesChange)valuesChange=false;
+        return result;
+    }
     //setting Coxa //
     void set_Id_Coxa(char id) {
         m_Coxa.iD = id;
+        valuesChange =true;
     }
     void set_PulseMax_Coxa(unsigned char value) {
         m_Coxa.max = value;
+        valuesChange =true;
     }
     void set_PulseMin_Coxa(unsigned char value) {
         m_Coxa.min = value;
+        valuesChange =true;
     }
     void set_DefaultPulse_Coxa(unsigned char value) {
         m_Coxa.basePose = value;
+        valuesChange =true;
     }
     char get_Id_Coxa(void) {
         return m_Coxa.iD;
@@ -103,15 +139,19 @@
     //setting Femur //
     void set_Id_Femur(char id) {
         m_Femur.iD = id;
+        valuesChange =true;
     }
     void set_PulseMax_Femur(unsigned char value) {
         m_Femur.max = value;
+        valuesChange =true;
     }
     void set_PulseMin_Femur(unsigned char value) {
         m_Femur.min = value;
+        valuesChange =true;
     }
     void set_DefaultPulse_Femur(unsigned char value) {
         m_Femur.basePose = value;
+        valuesChange =true;
     }
     char get_Id_Femur(void) {
         return m_Femur.iD;
@@ -131,15 +171,19 @@
     //setting Tibia //
     void set_Id_Tibia(char id) {
         m_Tibia.iD = id;
+        valuesChange =true;
     }
     void set_PulseMax_Tibia(unsigned char value) {
         m_Tibia.max = value;
+        valuesChange =true;
     }
     void set_PulseMin_Tibia(unsigned char value) {
         m_Tibia.min = value;
+        valuesChange =true;
     }
     void set_DefaultPulse_Tibia(unsigned char value) {
         m_Tibia.basePose = value;
+        valuesChange =true;
     }
     char get_Id_Tibia(void) {
         return m_Tibia.iD;
@@ -159,15 +203,19 @@
     //setting Tars //
     void set_Id_Tars(char id) {
         m_Tars.iD = id;
+        valuesChange =true;
     }
     void set_PulseMax_Tars(unsigned char value) {
         m_Tars.max = value;
+        valuesChange =true;
     }
     void set_PulseMin_Tars(unsigned char value) {
         m_Tars.min = value;
+        valuesChange =true;
     }
     void set_DefaultPulse_Tars(unsigned char value) {
         m_Tars.basePose = value;
+        valuesChange =true;
     }
     char get_Id_Tars(void) {
         return m_Tars.iD;
@@ -190,6 +238,7 @@
         m_Femur.iD= femurId;
         m_Tibia.iD= tibiaId;
         m_Tars.iD = tarsId;
+        valuesChange =true;
     }
     void set_PulseMax(unsigned char coxaValue,unsigned char femurValue,
                       unsigned char tibiaValue,unsigned char tarsValue) {
@@ -197,6 +246,7 @@
         m_Femur.max= femurValue;
         m_Tibia.max= tibiaValue;
         m_Tars.max = tarsValue;
+        valuesChange =true;
     }
     void set_PulseMin(unsigned char coxaValue,unsigned char femurValue,
                       unsigned char tibiaValue,unsigned char tarsValue) {
@@ -204,6 +254,7 @@
         m_Femur.min= femurValue;
         m_Tibia.min= tibiaValue;
         m_Tars.min = tarsValue;
+        valuesChange =true;
     }
     void set_DefaultPulse(unsigned char coxaValue,unsigned char femurValue,
                           unsigned char tibiaValue,unsigned char tarsValue) {
@@ -211,36 +262,49 @@
         m_Femur.basePose= femurValue;
         m_Tibia.basePose= tibiaValue;
         m_Tars.basePose = tarsValue;
+        valuesChange =true;
     }
     //////////
     // Move //
     //////////
     void move_Coxa(unsigned char value) {
-        if((value >= m_Coxa.min)&&(value <= m_Coxa.max ))
+        if((value >= m_Coxa.min)&&(value <= m_Coxa.max )&& (value != 255) ) {
             m_Coxa.curr = value;
+            valuesCoxaChange =true;
+        }
+        else
+        valuesCoxaChange =false;
     }
     void move_Femur(unsigned char value) {
-        if((value >= m_Femur.min)&&(value <= m_Femur.max ))
+        if((value >= m_Femur.min)&&(value <= m_Femur.max )&& (value != 255)) {
             m_Femur.curr = value;
+            valuesFemurChange =true;
+        }
+        else
+        valuesFemurChange =false;
     }
     void move_Tibia(unsigned char value) {
-        if((value >= m_Tibia.min)&&(value <= m_Tibia.max ))
+        if((value >= m_Tibia.min)&&(value <= m_Tibia.max )&& (value != 255)) {
             m_Tibia.curr = value;
+            valuesTibiaChange =true;
+        }
+        else
+        valuesTibiaChange =false;
     }
     void move_Tars(unsigned char value) {
-        if((value >= m_Tars.min)&&(value <= m_Tars.max ))
+        if((value >= m_Tars.min)&&(value <= m_Tars.max )&& (value != 255)) {
             m_Tars.curr = value;
+            valuesTarsChange =true;
+        }
+        else
+        valuesTarsChange =false;
     }
     void move(unsigned char coxaValue,unsigned char femurValue,
               unsigned char tibiaValue,unsigned char tarsValue) {//noob proof
-        if((coxaValue >= m_Coxa.min)&&(coxaValue <= m_Coxa.max ))
-            m_Coxa.curr = coxaValue;
-        if((femurValue >= m_Femur.min)&&(femurValue <= m_Femur.max ))
-            m_Femur.curr = femurValue;
-        if((tibiaValue >= m_Tibia.min)&&(tibiaValue <= m_Tibia.max ))
-            m_Tibia.curr = tibiaValue;
-        if((tarsValue >= m_Tars.min)&&(tarsValue <= m_Tars.max ))
-            m_Tars.curr = tarsValue;
+        this->move_Coxa(coxaValue);
+        this->move_Femur(femurValue);
+        this->move_Tibia(tibiaValue);
+        this->move_Tars(tarsValue);
     }
 };
 #endif /* PATTE_H_ */
\ No newline at end of file