![](/media/cache/profiles/4b0986230d9d7aded7f0c24033d221d4.jpg.50x50_q85.jpg)
Programme de contrôle de l'octopode 4DOF, Theraphosa-Salconi.
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
Diff: source/Motrice/Patte.h
- Revision:
- 27:ea60d12dccdf
- Parent:
- 19:0ac80045ba4c
- Child:
- 36:474d4795aafa
--- 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