Hexapod / Mbed OS PwmOut_HelloWorld

Dependencies:   Servo SoftPWM

Fork of PwmOut_HelloWorld by Francisco Núñez Cid

Committer:
Francisco_12
Date:
Thu Oct 18 19:20:28 2018 +0000
Revision:
14:f37214436441
Parent:
13:9890394ebc80
Child:
15:91e78eb9cae9
Funci?n movimiento del hex?podo completo

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Francisco_12 9:8e25ad440b2e 1 #include "hexapod.h"
Francisco_12 7:4bc4af0236f0 2
Francisco_12 13:9890394ebc80 3 Serial my_serial(TX, RX); //Puerto serie
Francisco_12 4:107e8818ba81 4
Francisco_12 14:f37214436441 5 SoftPWM patas[num_patas][num_servos] = {{SoftPWM(coxa_1),SoftPWM(femur_1),SoftPWM(tibia_1)},
Francisco_12 14:f37214436441 6 {SoftPWM(coxa_2),SoftPWM(femur_2),SoftPWM(tibia_2)},
Francisco_12 14:f37214436441 7 {SoftPWM(coxa_3),SoftPWM(femur_3),SoftPWM(tibia_3)},
Francisco_12 14:f37214436441 8 {SoftPWM(coxa_4),SoftPWM(femur_4),SoftPWM(tibia_4)},
Francisco_12 14:f37214436441 9 {SoftPWM(coxa_5),SoftPWM(femur_5),SoftPWM(tibia_5)},
Francisco_12 14:f37214436441 10 {SoftPWM(coxa_6),SoftPWM(femur_6),SoftPWM(tibia_6)}};
Francisco_12 14:f37214436441 11
Francisco_12 14:f37214436441 12 int mov_home[num_patas][num_servos] = { {115,90,90},
Francisco_12 14:f37214436441 13 {90,90,90},
Francisco_12 14:f37214436441 14 {60,90,90},
Francisco_12 14:f37214436441 15 {60,90,90},
Francisco_12 14:f37214436441 16 {90,90,90},
Francisco_12 14:f37214436441 17 {115,90,90}};
mbedAustin 1:5160ea45399b 18
Francisco_12 14:f37214436441 19 int mov_avanza[num_patas][num_servos] = { {135,90,90},
Francisco_12 14:f37214436441 20 {90,90,90},
Francisco_12 14:f37214436441 21 {60,90,90},
Francisco_12 14:f37214436441 22 {60,90,90},
Francisco_12 14:f37214436441 23 {90,90,90},
Francisco_12 14:f37214436441 24 {120,90,90}};
Francisco_12 14:f37214436441 25
Francisco_12 14:f37214436441 26 int mov_retrocede[num_patas][num_servos] = { {120,90,90},
Francisco_12 14:f37214436441 27 {90,90,90},
Francisco_12 14:f37214436441 28 {60,90,90},
Francisco_12 14:f37214436441 29 {60,90,90},
Francisco_12 14:f37214436441 30 {90,90,90},
Francisco_12 14:f37214436441 31 {120,90,90}};
Francisco_12 4:107e8818ba81 32
mbed_official 0:50d2b9c62765 33 int main() {
Francisco_12 13:9890394ebc80 34 mueve_pata(0,'H');
Francisco_12 14:f37214436441 35 //mueve_pata(1,'H');
Francisco_12 14:f37214436441 36 wait_ms(3000);
Francisco_12 4:107e8818ba81 37 bool mov = false;
Francisco_12 13:9890394ebc80 38 while(1){ //Hilo maestro "iría encolando un juego de comandos a cada pata"
Francisco_12 6:69a6ff2fd76d 39 if (mov == true) {
Francisco_12 13:9890394ebc80 40 mueve_pata(0,'A');
Francisco_12 14:f37214436441 41 // mueve_pata(1,'R');
Francisco_12 4:107e8818ba81 42 } else {
Francisco_12 14:f37214436441 43 mueve_pata(0,'H');
Francisco_12 14:f37214436441 44 // mueve_pata(1,'A');
Francisco_12 6:69a6ff2fd76d 45 }
Francisco_12 4:107e8818ba81 46 mov = !mov;
Francisco_12 14:f37214436441 47 wait_ms(1500);
Francisco_12 4:107e8818ba81 48 }
Francisco_12 4:107e8818ba81 49 }
Francisco_12 4:107e8818ba81 50
Francisco_12 13:9890394ebc80 51
Francisco_12 13:9890394ebc80 52 /*******************************************************************************************
Francisco_12 13:9890394ebc80 53 Función mueve_servo -> Realiza el movimiento del servo dependiendo del grado que se le pase
Francisco_12 13:9890394ebc80 54 *******************************************************************************************/
Francisco_12 13:9890394ebc80 55 void mueve_servo(SoftPWM* servo, int grados){
Francisco_12 13:9890394ebc80 56 float th=0;
Francisco_12 14:f37214436441 57 th = 565 + (1920/180)*grados;
Francisco_12 13:9890394ebc80 58 servo->pulsewidth_us(th);
Francisco_12 4:107e8818ba81 59 }
Francisco_12 4:107e8818ba81 60
Francisco_12 13:9890394ebc80 61
Francisco_12 13:9890394ebc80 62 /******************************************************************************************************************
Francisco_12 13:9890394ebc80 63 Función mueve_pata -> Realiza el movimiento de la pata que se le pasa de entrada e indicando el tipo de movimiento
Francisco_12 13:9890394ebc80 64 ******************************************************************************************************************/
Francisco_12 13:9890394ebc80 65 void mueve_pata(char pata, char pos){
Francisco_12 4:107e8818ba81 66 switch(pos){
Francisco_12 4:107e8818ba81 67 case 'A': //Avanza
Francisco_12 14:f37214436441 68 //mueve_servo(&patas[pata][SERVO_COX], mov_avanza[pata][SERVO_COX]);
Francisco_12 14:f37214436441 69 //mueve_servo(&patas[pata][SERVO_FEM], mov_avanza[pata][SERVO_FEM]);
Francisco_12 14:f37214436441 70 //mueve_servo(&patas[pata][SERVO_TIB], mov_avanza[pata][SERVO_TIB]);
Francisco_12 7:4bc4af0236f0 71 break;
Francisco_12 7:4bc4af0236f0 72 case 'R': //Retrocede
Francisco_12 14:f37214436441 73 //mueve_servo(&patas[pata][SERVO_COX], mov_retrocede[pata][SERVO_COX]);
Francisco_12 14:f37214436441 74 //mueve_servo(&patas[pata][SERVO_FEM], mov_retrocede[pata][SERVO_FEM]);
Francisco_12 14:f37214436441 75 //mueve_servo(&patas[pata][SERVO_TIB], mov_retrocede[pata][SERVO_TIB]);
Francisco_12 7:4bc4af0236f0 76 break;
Francisco_12 7:4bc4af0236f0 77 case 'H': //Home
Francisco_12 14:f37214436441 78 mueve_servo(&patas[pata][SERVO_COX], mov_home[pata][SERVO_COX]);
Francisco_12 14:f37214436441 79 mueve_servo(&patas[pata][SERVO_FEM], mov_home[pata][SERVO_FEM]);
Francisco_12 14:f37214436441 80 mueve_servo(&patas[pata][SERVO_TIB], mov_home[pata][SERVO_TIB]);
Francisco_12 10:88d5a9711af8 81 break;
Francisco_12 7:4bc4af0236f0 82 default: //Home
Francisco_12 14:f37214436441 83 //mueve_servo(&patas[pata][SERVO_COX], mov_home[pata][SERVO_COX]);
Francisco_12 14:f37214436441 84 //mueve_servo(&patas[pata][SERVO_FEM], mov_home[pata][SERVO_FEM]);
Francisco_12 14:f37214436441 85 //mueve_servo(&patas[pata][SERVO_TIB], mov_home[pata][SERVO_TIB]);
Francisco_12 12:e1d33e64797c 86 break;
Francisco_12 7:4bc4af0236f0 87 }
Francisco_12 7:4bc4af0236f0 88 }
Francisco_12 14:f37214436441 89
Francisco_12 14:f37214436441 90
Francisco_12 14:f37214436441 91 /******************************************************************************************************************
Francisco_12 14:f37214436441 92 Función mueve_hexapodo -> Realiza el movimiento del hexapodo completo dependiendo del tipo elegido
Francisco_12 14:f37214436441 93 type = 0 -> HOME
Francisco_12 14:f37214436441 94 type = 1 -> AVANZA
Francisco_12 14:f37214436441 95 type = 2 -> RETROCEDE
Francisco_12 14:f37214436441 96 ******************************************************************************************************************/
Francisco_12 14:f37214436441 97 void mueve_hexapodo(int type){
Francisco_12 14:f37214436441 98 if(type == HOME){
Francisco_12 14:f37214436441 99 mueve_pata(0,'H');
Francisco_12 14:f37214436441 100 mueve_pata(1,'H');
Francisco_12 14:f37214436441 101 mueve_pata(2,'H');
Francisco_12 14:f37214436441 102 mueve_pata(3,'H');
Francisco_12 14:f37214436441 103 mueve_pata(4,'H');
Francisco_12 14:f37214436441 104 mueve_pata(5,'H');
Francisco_12 14:f37214436441 105 }else if(type == AVANZA){
Francisco_12 14:f37214436441 106 if (mov == true) {
Francisco_12 14:f37214436441 107 mueve_pata(0,'A');
Francisco_12 14:f37214436441 108 mueve_pata(1,'R');
Francisco_12 14:f37214436441 109 mueve_pata(2,'A');
Francisco_12 14:f37214436441 110 mueve_pata(3,'R');
Francisco_12 14:f37214436441 111 mueve_pata(4,'A');
Francisco_12 14:f37214436441 112 mueve_pata(5,'R');
Francisco_12 14:f37214436441 113 } else {
Francisco_12 14:f37214436441 114 mueve_pata(0,'R');
Francisco_12 14:f37214436441 115 mueve_pata(1,'A');
Francisco_12 14:f37214436441 116 mueve_pata(2,'R');
Francisco_12 14:f37214436441 117 mueve_pata(3,'A');
Francisco_12 14:f37214436441 118 mueve_pata(4,'R');
Francisco_12 14:f37214436441 119 mueve_pata(5,'A');
Francisco_12 14:f37214436441 120 }
Francisco_12 14:f37214436441 121 }else if(type == RETROCEDE){
Francisco_12 14:f37214436441 122 if (mov == true) {
Francisco_12 14:f37214436441 123 mueve_pata(0,'R');
Francisco_12 14:f37214436441 124 mueve_pata(1,'A');
Francisco_12 14:f37214436441 125 mueve_pata(2,'R');
Francisco_12 14:f37214436441 126 mueve_pata(3,'A');
Francisco_12 14:f37214436441 127 mueve_pata(4,'R');
Francisco_12 14:f37214436441 128 mueve_pata(5,'A');
Francisco_12 14:f37214436441 129 } else {
Francisco_12 14:f37214436441 130 mueve_pata(0,'A');
Francisco_12 14:f37214436441 131 mueve_pata(1,'R');
Francisco_12 14:f37214436441 132 mueve_pata(2,'A');
Francisco_12 14:f37214436441 133 mueve_pata(3,'R');
Francisco_12 14:f37214436441 134 mueve_pata(4,'A');
Francisco_12 14:f37214436441 135 mueve_pata(5,'R');
Francisco_12 14:f37214436441 136 }
Francisco_12 14:f37214436441 137 }