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
Committer:
salco
Date:
Tue Jan 31 13:15:42 2017 +0000
Revision:
41:0b5c14dda54a
Parent:
36:474d4795aafa
Tentative de modifier les commit inutile sur debug.h

Who changed what in which revision?

UserRevisionLine numberNew contents of line
salco 36:474d4795aafa 1 /**
salco 0:e4151abdff23 2 * Patte.h
salco 0:e4151abdff23 3 *
salco 0:e4151abdff23 4 * Created on: Mar 03, 2015
salco 0:e4151abdff23 5 * Author: salco
salco 0:e4151abdff23 6 */
salco 0:e4151abdff23 7 #ifndef PATTE_H_
salco 0:e4151abdff23 8 #define PATTE_H_
salco 0:e4151abdff23 9
salco 0:e4151abdff23 10 #define NBR_SERVO 32
salco 0:e4151abdff23 11 #define DEFAULTPOSITION 150
salco 0:e4151abdff23 12 #define DEFAULTMAX 225
salco 0:e4151abdff23 13 #define DEFAULTMIN 75
salco 0:e4151abdff23 14
salco 0:e4151abdff23 15 //#include <string>
salco 0:e4151abdff23 16 #include <stdio.h>
salco 27:ea60d12dccdf 17 //#include "debug.h"
salco 0:e4151abdff23 18
salco 0:e4151abdff23 19 struct servo_t {
salco 0:e4151abdff23 20 char iD; //use for ssc-32
salco 0:e4151abdff23 21 // all value down is a pulse value between 750-2250 //
salco 0:e4151abdff23 22 unsigned char basePose;
salco 0:e4151abdff23 23 unsigned char max;
salco 0:e4151abdff23 24 unsigned char min;
salco 0:e4151abdff23 25 // mabey change curr for a integer to get more precision and less space //
salco 0:e4151abdff23 26 unsigned char curr;
salco 0:e4151abdff23 27 };
salco 0:e4151abdff23 28
salco 0:e4151abdff23 29 class Patte
salco 0:e4151abdff23 30 {
salco 0:e4151abdff23 31 // number related to the SSC-32 //
salco 0:e4151abdff23 32 /*char m_numServo_Coxa;
salco 0:e4151abdff23 33 char m_numServo_Femur;
salco 0:e4151abdff23 34 char m_numServo_Tibia;
salco 0:e4151abdff23 35 char m_numServo_Tars;*/
salco 0:e4151abdff23 36 char m_id;
salco 0:e4151abdff23 37 servo_t m_Coxa;
salco 0:e4151abdff23 38 servo_t m_Femur;
salco 0:e4151abdff23 39 servo_t m_Tibia;
salco 0:e4151abdff23 40 servo_t m_Tars;
salco 0:e4151abdff23 41 char buffer [50];
salco 27:ea60d12dccdf 42 bool valuesChange;
salco 27:ea60d12dccdf 43 bool valuesCoxaChange;
salco 27:ea60d12dccdf 44 bool valuesFemurChange;
salco 27:ea60d12dccdf 45 bool valuesTibiaChange;
salco 27:ea60d12dccdf 46 bool valuesTarsChange;
salco 27:ea60d12dccdf 47
salco 0:e4151abdff23 48 public:
salco 0:e4151abdff23 49 Patte(char patteId,char coxaId,char femurId,char tibiaId,char tarsId) {
salco 0:e4151abdff23 50 m_id = patteId;
salco 27:ea60d12dccdf 51 valuesChange = false;
salco 0:e4151abdff23 52
salco 0:e4151abdff23 53 m_Coxa.iD = coxaId;
salco 0:e4151abdff23 54 m_Coxa.max = DEFAULTMAX;
salco 0:e4151abdff23 55 m_Coxa.min = DEFAULTMIN;
salco 0:e4151abdff23 56 m_Coxa.curr= DEFAULTPOSITION;
salco 27:ea60d12dccdf 57 valuesCoxaChange = false;
salco 0:e4151abdff23 58
salco 0:e4151abdff23 59 m_Femur.iD = femurId;
salco 0:e4151abdff23 60 m_Femur.max = DEFAULTMAX;
salco 0:e4151abdff23 61 m_Femur.min = DEFAULTMIN;
salco 0:e4151abdff23 62 m_Femur.curr= DEFAULTPOSITION;
salco 27:ea60d12dccdf 63 valuesFemurChange = false;
salco 0:e4151abdff23 64
salco 0:e4151abdff23 65 m_Tibia.iD = tibiaId;
salco 0:e4151abdff23 66 m_Tibia.max = DEFAULTMAX;
salco 0:e4151abdff23 67 m_Tibia.min = DEFAULTMIN;
salco 0:e4151abdff23 68 m_Tibia.curr= DEFAULTPOSITION;
salco 27:ea60d12dccdf 69 valuesTibiaChange = false;
salco 0:e4151abdff23 70
salco 0:e4151abdff23 71 m_Tars.iD = tarsId;
salco 0:e4151abdff23 72 m_Tars.max = DEFAULTMAX;
salco 0:e4151abdff23 73 m_Tars.min = DEFAULTMIN;
salco 0:e4151abdff23 74 m_Tars.curr= DEFAULTPOSITION;
salco 27:ea60d12dccdf 75 valuesTarsChange = false;
salco 0:e4151abdff23 76 }
salco 27:ea60d12dccdf 77 virtual ~Patte() {}
salco 0:e4151abdff23 78 char id(void) {
salco 0:e4151abdff23 79 return m_id;
salco 0:e4151abdff23 80 }
salco 27:ea60d12dccdf 81 const char* toString(void) {
salco 27:ea60d12dccdf 82 char buffer1[50]= {""};
salco 27:ea60d12dccdf 83 char buffer2[50]= {""};
salco 27:ea60d12dccdf 84 char buffer3[50]= {""};
salco 27:ea60d12dccdf 85 char buffer4[50]= {""};
salco 27:ea60d12dccdf 86 for(int i=0;i<50;i++)buffer[i]=0;
salco 27:ea60d12dccdf 87
salco 27:ea60d12dccdf 88 if(valuesCoxaChange)
salco 27:ea60d12dccdf 89 sprintf (buffer1,"#%d P%d0 ",m_Coxa.iD,m_Coxa.curr);
salco 27:ea60d12dccdf 90 if(valuesFemurChange)
salco 27:ea60d12dccdf 91 sprintf (buffer2,"#%d P%d0 ",m_Femur.iD,m_Femur.curr);
salco 27:ea60d12dccdf 92 if(valuesTibiaChange)
salco 27:ea60d12dccdf 93 sprintf (buffer3,"#%d P%d0 ",m_Tibia.iD,m_Tibia.curr);
salco 27:ea60d12dccdf 94 if(valuesTarsChange)
salco 27:ea60d12dccdf 95 sprintf (buffer4,"#%d P%d0",m_Tars.iD,m_Tars.curr);
salco 27:ea60d12dccdf 96 //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);
salco 27:ea60d12dccdf 97 sprintf (buffer,"%s%s%s%s",buffer1,buffer2,buffer3,buffer4);
salco 27:ea60d12dccdf 98 //debug(1,"\n\n\rintern string %s",buffer);
salco 27:ea60d12dccdf 99
salco 27:ea60d12dccdf 100 return buffer;
salco 27:ea60d12dccdf 101 }
salco 27:ea60d12dccdf 102 bool haveChange() {
salco 27:ea60d12dccdf 103 bool result = valuesChange|valuesCoxaChange|valuesFemurChange|valuesTibiaChange|valuesTarsChange;
salco 27:ea60d12dccdf 104 if(valuesChange)valuesChange=false;
salco 27:ea60d12dccdf 105 return result;
salco 27:ea60d12dccdf 106 }
salco 0:e4151abdff23 107 //setting Coxa //
salco 0:e4151abdff23 108 void set_Id_Coxa(char id) {
salco 0:e4151abdff23 109 m_Coxa.iD = id;
salco 27:ea60d12dccdf 110 valuesChange =true;
salco 0:e4151abdff23 111 }
salco 0:e4151abdff23 112 void set_PulseMax_Coxa(unsigned char value) {
salco 0:e4151abdff23 113 m_Coxa.max = value;
salco 27:ea60d12dccdf 114 valuesChange =true;
salco 0:e4151abdff23 115 }
salco 0:e4151abdff23 116 void set_PulseMin_Coxa(unsigned char value) {
salco 0:e4151abdff23 117 m_Coxa.min = value;
salco 27:ea60d12dccdf 118 valuesChange =true;
salco 0:e4151abdff23 119 }
salco 0:e4151abdff23 120 void set_DefaultPulse_Coxa(unsigned char value) {
salco 0:e4151abdff23 121 m_Coxa.basePose = value;
salco 27:ea60d12dccdf 122 valuesChange =true;
salco 0:e4151abdff23 123 }
salco 0:e4151abdff23 124 char get_Id_Coxa(void) {
salco 0:e4151abdff23 125 return m_Coxa.iD;
salco 0:e4151abdff23 126 }
salco 0:e4151abdff23 127 unsigned char get_PulseMax_Coxa(void) {
salco 0:e4151abdff23 128 return m_Coxa.max;
salco 0:e4151abdff23 129 }
salco 0:e4151abdff23 130 unsigned char get_PulseMin_Coxa(void) {
salco 0:e4151abdff23 131 return m_Coxa.min;
salco 0:e4151abdff23 132 }
salco 0:e4151abdff23 133 unsigned char get_DefaultPulse_Coxa(void) {
salco 0:e4151abdff23 134 return m_Coxa.basePose;
salco 0:e4151abdff23 135 }
salco 0:e4151abdff23 136 unsigned char get_CurrentPulse_Coxa(void) {
salco 0:e4151abdff23 137 return m_Coxa.curr;
salco 0:e4151abdff23 138 }
salco 0:e4151abdff23 139 //setting Femur //
salco 0:e4151abdff23 140 void set_Id_Femur(char id) {
salco 0:e4151abdff23 141 m_Femur.iD = id;
salco 27:ea60d12dccdf 142 valuesChange =true;
salco 0:e4151abdff23 143 }
salco 0:e4151abdff23 144 void set_PulseMax_Femur(unsigned char value) {
salco 0:e4151abdff23 145 m_Femur.max = value;
salco 27:ea60d12dccdf 146 valuesChange =true;
salco 0:e4151abdff23 147 }
salco 0:e4151abdff23 148 void set_PulseMin_Femur(unsigned char value) {
salco 0:e4151abdff23 149 m_Femur.min = value;
salco 27:ea60d12dccdf 150 valuesChange =true;
salco 0:e4151abdff23 151 }
salco 0:e4151abdff23 152 void set_DefaultPulse_Femur(unsigned char value) {
salco 0:e4151abdff23 153 m_Femur.basePose = value;
salco 27:ea60d12dccdf 154 valuesChange =true;
salco 0:e4151abdff23 155 }
salco 0:e4151abdff23 156 char get_Id_Femur(void) {
salco 0:e4151abdff23 157 return m_Femur.iD;
salco 0:e4151abdff23 158 }
salco 0:e4151abdff23 159 unsigned char get_PulseMax_Femur(void) {
salco 0:e4151abdff23 160 return m_Femur.max;
salco 0:e4151abdff23 161 }
salco 0:e4151abdff23 162 unsigned char get_PulseMin_Femur(void) {
salco 0:e4151abdff23 163 return m_Femur.min;
salco 0:e4151abdff23 164 }
salco 0:e4151abdff23 165 unsigned char get_DefaultPulse_Femur(void) {
salco 0:e4151abdff23 166 return m_Femur.basePose;
salco 0:e4151abdff23 167 }
salco 0:e4151abdff23 168 unsigned char get_CurrentPulse_Femur(void) {
salco 0:e4151abdff23 169 return m_Femur.curr;
salco 0:e4151abdff23 170 }
salco 0:e4151abdff23 171 //setting Tibia //
salco 0:e4151abdff23 172 void set_Id_Tibia(char id) {
salco 0:e4151abdff23 173 m_Tibia.iD = id;
salco 27:ea60d12dccdf 174 valuesChange =true;
salco 0:e4151abdff23 175 }
salco 0:e4151abdff23 176 void set_PulseMax_Tibia(unsigned char value) {
salco 0:e4151abdff23 177 m_Tibia.max = value;
salco 27:ea60d12dccdf 178 valuesChange =true;
salco 0:e4151abdff23 179 }
salco 0:e4151abdff23 180 void set_PulseMin_Tibia(unsigned char value) {
salco 0:e4151abdff23 181 m_Tibia.min = value;
salco 27:ea60d12dccdf 182 valuesChange =true;
salco 0:e4151abdff23 183 }
salco 0:e4151abdff23 184 void set_DefaultPulse_Tibia(unsigned char value) {
salco 0:e4151abdff23 185 m_Tibia.basePose = value;
salco 27:ea60d12dccdf 186 valuesChange =true;
salco 0:e4151abdff23 187 }
salco 0:e4151abdff23 188 char get_Id_Tibia(void) {
salco 0:e4151abdff23 189 return m_Tibia.iD;
salco 0:e4151abdff23 190 }
salco 0:e4151abdff23 191 unsigned char get_PulseMax_Tibia(void) {
salco 0:e4151abdff23 192 return m_Tibia.max;
salco 0:e4151abdff23 193 }
salco 0:e4151abdff23 194 unsigned char get_PulseMin_Tibia(void) {
salco 0:e4151abdff23 195 return m_Tibia.min;
salco 0:e4151abdff23 196 }
salco 0:e4151abdff23 197 unsigned char get_DefaultPulse_Tibia(void) {
salco 0:e4151abdff23 198 return m_Tibia.basePose;
salco 0:e4151abdff23 199 }
salco 0:e4151abdff23 200 unsigned char get_CurrentPulse_Tibia(void) {
salco 0:e4151abdff23 201 return m_Tibia.curr;
salco 0:e4151abdff23 202 }
salco 0:e4151abdff23 203 //setting Tars //
salco 0:e4151abdff23 204 void set_Id_Tars(char id) {
salco 0:e4151abdff23 205 m_Tars.iD = id;
salco 27:ea60d12dccdf 206 valuesChange =true;
salco 0:e4151abdff23 207 }
salco 0:e4151abdff23 208 void set_PulseMax_Tars(unsigned char value) {
salco 0:e4151abdff23 209 m_Tars.max = value;
salco 27:ea60d12dccdf 210 valuesChange =true;
salco 0:e4151abdff23 211 }
salco 0:e4151abdff23 212 void set_PulseMin_Tars(unsigned char value) {
salco 0:e4151abdff23 213 m_Tars.min = value;
salco 27:ea60d12dccdf 214 valuesChange =true;
salco 0:e4151abdff23 215 }
salco 0:e4151abdff23 216 void set_DefaultPulse_Tars(unsigned char value) {
salco 0:e4151abdff23 217 m_Tars.basePose = value;
salco 27:ea60d12dccdf 218 valuesChange =true;
salco 0:e4151abdff23 219 }
salco 0:e4151abdff23 220 char get_Id_Tars(void) {
salco 0:e4151abdff23 221 return m_Tars.iD;
salco 0:e4151abdff23 222 }
salco 0:e4151abdff23 223 unsigned char get_PulseMax_Tars(void) {
salco 0:e4151abdff23 224 return m_Tars.max;
salco 0:e4151abdff23 225 }
salco 0:e4151abdff23 226 unsigned char get_PulseMin_Tars(void) {
salco 0:e4151abdff23 227 return m_Tars.min;
salco 0:e4151abdff23 228 }
salco 0:e4151abdff23 229 unsigned char get_DefaultPulse_Tars(void) {
salco 0:e4151abdff23 230 return m_Tars.basePose;
salco 0:e4151abdff23 231 }
salco 0:e4151abdff23 232 unsigned char get_CurrentPulse_Tars(void) {
salco 0:e4151abdff23 233 return m_Tars.curr;
salco 0:e4151abdff23 234 }
salco 0:e4151abdff23 235 //setting All-in-one //
salco 0:e4151abdff23 236 void set_Id(char coxaId,char femurId,char tibiaId,char tarsId) {
salco 0:e4151abdff23 237 m_Coxa.iD = coxaId;
salco 0:e4151abdff23 238 m_Femur.iD= femurId;
salco 0:e4151abdff23 239 m_Tibia.iD= tibiaId;
salco 0:e4151abdff23 240 m_Tars.iD = tarsId;
salco 27:ea60d12dccdf 241 valuesChange =true;
salco 0:e4151abdff23 242 }
salco 0:e4151abdff23 243 void set_PulseMax(unsigned char coxaValue,unsigned char femurValue,
salco 0:e4151abdff23 244 unsigned char tibiaValue,unsigned char tarsValue) {
salco 0:e4151abdff23 245 m_Coxa.max = coxaValue;
salco 0:e4151abdff23 246 m_Femur.max= femurValue;
salco 0:e4151abdff23 247 m_Tibia.max= tibiaValue;
salco 0:e4151abdff23 248 m_Tars.max = tarsValue;
salco 27:ea60d12dccdf 249 valuesChange =true;
salco 0:e4151abdff23 250 }
salco 0:e4151abdff23 251 void set_PulseMin(unsigned char coxaValue,unsigned char femurValue,
salco 0:e4151abdff23 252 unsigned char tibiaValue,unsigned char tarsValue) {
salco 0:e4151abdff23 253 m_Coxa.min = coxaValue;
salco 0:e4151abdff23 254 m_Femur.min= femurValue;
salco 0:e4151abdff23 255 m_Tibia.min= tibiaValue;
salco 0:e4151abdff23 256 m_Tars.min = tarsValue;
salco 27:ea60d12dccdf 257 valuesChange =true;
salco 0:e4151abdff23 258 }
salco 0:e4151abdff23 259 void set_DefaultPulse(unsigned char coxaValue,unsigned char femurValue,
salco 0:e4151abdff23 260 unsigned char tibiaValue,unsigned char tarsValue) {
salco 0:e4151abdff23 261 m_Coxa.basePose = coxaValue;
salco 0:e4151abdff23 262 m_Femur.basePose= femurValue;
salco 0:e4151abdff23 263 m_Tibia.basePose= tibiaValue;
salco 0:e4151abdff23 264 m_Tars.basePose = tarsValue;
salco 27:ea60d12dccdf 265 valuesChange =true;
salco 0:e4151abdff23 266 }
salco 0:e4151abdff23 267 //////////
salco 0:e4151abdff23 268 // Move //
salco 0:e4151abdff23 269 //////////
salco 0:e4151abdff23 270 void move_Coxa(unsigned char value) {
salco 27:ea60d12dccdf 271 if((value >= m_Coxa.min)&&(value <= m_Coxa.max )&& (value != 255) ) {
salco 0:e4151abdff23 272 m_Coxa.curr = value;
salco 27:ea60d12dccdf 273 valuesCoxaChange =true;
salco 27:ea60d12dccdf 274 }
salco 27:ea60d12dccdf 275 else
salco 27:ea60d12dccdf 276 valuesCoxaChange =false;
salco 0:e4151abdff23 277 }
salco 0:e4151abdff23 278 void move_Femur(unsigned char value) {
salco 27:ea60d12dccdf 279 if((value >= m_Femur.min)&&(value <= m_Femur.max )&& (value != 255)) {
salco 0:e4151abdff23 280 m_Femur.curr = value;
salco 27:ea60d12dccdf 281 valuesFemurChange =true;
salco 27:ea60d12dccdf 282 }
salco 27:ea60d12dccdf 283 else
salco 27:ea60d12dccdf 284 valuesFemurChange =false;
salco 0:e4151abdff23 285 }
salco 0:e4151abdff23 286 void move_Tibia(unsigned char value) {
salco 27:ea60d12dccdf 287 if((value >= m_Tibia.min)&&(value <= m_Tibia.max )&& (value != 255)) {
salco 0:e4151abdff23 288 m_Tibia.curr = value;
salco 27:ea60d12dccdf 289 valuesTibiaChange =true;
salco 27:ea60d12dccdf 290 }
salco 27:ea60d12dccdf 291 else
salco 27:ea60d12dccdf 292 valuesTibiaChange =false;
salco 0:e4151abdff23 293 }
salco 0:e4151abdff23 294 void move_Tars(unsigned char value) {
salco 27:ea60d12dccdf 295 if((value >= m_Tars.min)&&(value <= m_Tars.max )&& (value != 255)) {
salco 0:e4151abdff23 296 m_Tars.curr = value;
salco 27:ea60d12dccdf 297 valuesTarsChange =true;
salco 27:ea60d12dccdf 298 }
salco 27:ea60d12dccdf 299 else
salco 27:ea60d12dccdf 300 valuesTarsChange =false;
salco 0:e4151abdff23 301 }
salco 0:e4151abdff23 302 void move(unsigned char coxaValue,unsigned char femurValue,
salco 19:0ac80045ba4c 303 unsigned char tibiaValue,unsigned char tarsValue) {//noob proof
salco 27:ea60d12dccdf 304 this->move_Coxa(coxaValue);
salco 27:ea60d12dccdf 305 this->move_Femur(femurValue);
salco 27:ea60d12dccdf 306 this->move_Tibia(tibiaValue);
salco 27:ea60d12dccdf 307 this->move_Tars(tarsValue);
salco 0:e4151abdff23 308 }
salco 0:e4151abdff23 309 };
salco 0:e4151abdff23 310 #endif /* PATTE_H_ */