Proyecto Hexápodo

Dependencies:   Servo SoftPWM

Fork of PwmOut_HelloWorld by Francisco Núñez Cid

main.cpp

Committer:
Francisco_12
Date:
2018-10-09
Revision:
8:b0a6c16e781b
Parent:
7:4bc4af0236f0

File content as of revision 8:b0a6c16e781b:

#include "mbed.h"
#include "SoftPWM.h"
#include "Servo.h"

#define MOV_AV 180    //En grados
#define INICIO 90     //En grados
#define MOV_RE 0      //En grados

#define ARRIBA 0
#define ABAJO 1
#define HOME 2
#define AVANZA 3
#define RETROCEDE 4
#define DERECHA 5
#define IZQUIERDA 6


Serial my_serial(PC_6, PA_12); //Puerto serie

/*SoftPWM servo_C_B_R(PB_8); //Servo Coxa_Behind_Right
SoftPWM servo_F_B_R(PB_9); //Servo Femur_Behind_Right
SoftPWM servo_T_B_R(PB_7); //Servo Tibia_Behind_Right

SoftPWM servo_C_M_R(PA_0); //Servo Coxa_Medium_Right
SoftPWM servo_F_M_R(PA_1); //Servo Femur_Medium_Right
SoftPWM servo_T_M_R(PB_0); //Servo Tibia_Medium_Right

SoftPWM servo_C_F_R(PB_1); //Servo Coxa_Forward_Right
SoftPWM servo_F_F_R(PA_3); //Servo Femur_Forward_Right
SoftPWM servo_T_F_R(PA_2); //Servo Tibia_Forward_Right

SoftPWM servo_C_B_L(PA_5); //Servo Coxa_Behind_Left
SoftPWM servo_F_B_L(PA_6); //Servo Femur_Behind_Left
SoftPWM servo_T_B_L(PA_7); //Servo Tibia_Behind_Left

SoftPWM servo_C_M_L(PB_6); //Servo Coxa_Medium_Left
SoftPWM servo_F_M_L(PA_9); //Servo Femur_Medium_Left
SoftPWM servo_T_M_L(PA_8); //Servo Tibia_Medium_Left

SoftPWM servo_C_F_L(PB_10); //Servo Coxa_Forward_Left
SoftPWM servo_F_F_L(PB_3); //Servo Femur_Forward_Left
SoftPWM servo_T_F_L(PA_10); //Servo Tibia_Forward_Left
*/

SoftPWM pata1[] = {SoftPWM(PB_8),SoftPWM(PB_9),SoftPWM(PB_7)}; //{Coxa, Femur, Tibia} -> Behind Right
SoftPWM pata2[] = {SoftPWM(PA_0),SoftPWM(PA_1),SoftPWM(PB_0)}; //{Coxa, Femur, Tibia} -> Medium Right
SoftPWM pata3[] = {SoftPWM(PB_1),SoftPWM(PA_3),SoftPWM(PA_2)}; //{Coxa, Femur, Tibia} -> Forward Right
SoftPWM pata4[] = {SoftPWM(PA_5),SoftPWM(PA_6),SoftPWM(PA_7)}; //{Coxa, Femur, Tibia} -> Behind Left
SoftPWM pata5[] = {SoftPWM(PB_6),SoftPWM(PA_9),SoftPWM(PA_8)}; //{Coxa, Femur, Tibia} -> Medium Left
SoftPWM pata6[] = {SoftPWM(PB_10),SoftPWM(PB_3),SoftPWM(PA_10)}; //{Coxa, Femur, Tibia} -> Forward Left

void mueve_servo(SoftPWM* pata, int grados);
void mueve_pata1(char pos);
void mueve_pata2(char pos);
void mueve_pata3(char pos);
void mueve_pata4(char pos);
void mueve_pata5(char pos);
void mueve_pata6(char pos);
void hexapod_mov(int type);

int main() {
     pata3[1].period_us(20000); //20ms period, typical for analog RC servo
     bool mov = false;
     while(1){
        if (mov == true) {
            mueve_servo(&pata3[1], AVANZA);
        } else {
            mueve_servo(&pata3[1], HOME);
        }
        //mueve_pata('A');
         mov = !mov;
         wait_ms(1000); //Tiempo de espera entre movimiento y movimiento -> 250
         }
}

void mueve_servo(SoftPWM* pata, int grados){ //Función que realiza el movimiento de un servo
    int th=0;
    th = 560 + (1925*grados)/180;    //Límites del Servo [560 - 2485] -> OFFSET:1925
    pata->pulsewidth_us(th);
}

void mueve_pata1(char pos){ //Función que realiza el movimiento de una pata dependiendo de lo que se quiera hacer
    switch(pos){
        case 'A':    //Avanza
            mueve_servo(&pata1[0], MOV_AV);
            mueve_servo(&pata1[1], MOV_AV);
            mueve_servo(&pata1[2], MOV_AV);
            break;
        case 'R':    //Retrocede
            mueve_servo(&pata1[0], MOV_RE);
            mueve_servo(&pata1[1], MOV_RE);
            mueve_servo(&pata1[2], MOV_RE);
            break;
        case 'H':    //Home
            mueve_servo(&pata1[0], INICIO);
            mueve_servo(&pata1[1], INICIO);
            mueve_servo(&pata1[2], INICIO);
            break;
        case 'S':    //Sube
            mueve_servo(&pata1[0], INICIO);
            mueve_servo(&pata1[1], INICIO);
            mueve_servo(&pata1[2], INICIO);
            break;    
        default:    //Home
            mueve_servo(&pata1[0], INICIO);
            mueve_servo(&pata1[1], INICIO);
            mueve_servo(&pata1[2], INICIO);
            break;
    }
}

void mueve_pata2(char pos){
    switch(pos){
        case 'A':    //Avanza
            mueve_servo(&pata2[0], MOV_AV);
            mueve_servo(&pata2[1], MOV_AV);
            mueve_servo(&pata2[2], MOV_AV);
            break;
        case 'R':    //Retrocede
            mueve_servo(&pata2[0], MOV_RE);
            mueve_servo(&pata2[1], MOV_RE);
            mueve_servo(&pata2[2], MOV_RE);
            break;
        case 'H':    //Home
            mueve_servo(&pata2[0], INICIO);
            mueve_servo(&pata2[1], INICIO);
            mueve_servo(&pata2[2], INICIO);
            break; 
        default:    //Home
            mueve_servo(&pata2[0], INICIO);
            mueve_servo(&pata2[1], INICIO);
            mueve_servo(&pata2[2], INICIO);
            break;           
    }
}

void mueve_pata3(char pos){
    switch(pos){
        case 'A':    //Avanza
            mueve_servo(&pata3[0], MOV_AV);
            mueve_servo(&pata3[1], MOV_AV);
            mueve_servo(&pata3[2], MOV_AV);
            break;
        case 'R':    //Retrocede
            mueve_servo(&pata3[0], MOV_RE);
            mueve_servo(&pata3[1], MOV_RE);
            mueve_servo(&pata3[2], MOV_RE);
            break;
        case 'H':    //Home
            mueve_servo(&pata3[0], INICIO);
            mueve_servo(&pata3[1], INICIO);
            mueve_servo(&pata3[2], INICIO);
            break; 
        default:    //Home
            mueve_servo(&pata3[0], INICIO);
            mueve_servo(&pata3[1], INICIO);
            mueve_servo(&pata3[2], INICIO);
            break;           
    }
}

void mueve_pata4(char pos){
    switch(pos){
        case 'A':    //Avanza
            mueve_servo(&pata4[0], MOV_AV);
            mueve_servo(&pata4[1], MOV_AV);
            mueve_servo(&pata4[2], MOV_AV);
            break;
        case 'R':    //Retrocede
            mueve_servo(&pata4[0], MOV_RE);
            mueve_servo(&pata4[1], MOV_RE);
            mueve_servo(&pata4[2], MOV_RE);
            break;
        case 'H':    //Home
            mueve_servo(&pata4[0], INICIO);
            mueve_servo(&pata4[1], INICIO);
            mueve_servo(&pata4[2], INICIO);
            break; 
        default:    //Home
            mueve_servo(&pata4[0], INICIO);
            mueve_servo(&pata4[1], INICIO);
            mueve_servo(&pata4[2], INICIO);
            break;           
    }
}

void mueve_pata5(char pos){
    switch(pos){
        case 'A':    //Avanza
            mueve_servo(&pata5[0], MOV_AV);
            mueve_servo(&pata5[1], MOV_AV);
            mueve_servo(&pata5[2], MOV_AV);
            break;
        case 'R':    //Retrocede
            mueve_servo(&pata5[0], MOV_RE);
            mueve_servo(&pata5[1], MOV_RE);
            mueve_servo(&pata5[2], MOV_RE);
            break;
        case 'H':    //Home
            mueve_servo(&pata5[0], INICIO);
            mueve_servo(&pata5[1], INICIO);
            mueve_servo(&pata5[2], INICIO);
            break; 
        default:    //Home
            mueve_servo(&pata5[0], INICIO);
            mueve_servo(&pata5[1], INICIO);
            mueve_servo(&pata5[2], INICIO);
            break;           
    }
}

void mueve_pata6(char pos){
    switch(pos){
        case 'A':    //Avanza
            mueve_servo(&pata6[0], MOV_AV);
            mueve_servo(&pata6[1], MOV_AV);
            mueve_servo(&pata6[2], MOV_AV);
            break;
        case 'R':    //Retrocede
            mueve_servo(&pata6[0], MOV_RE);
            mueve_servo(&pata6[1], MOV_RE);
            mueve_servo(&pata6[2], MOV_RE);
            break;
        case 'H':    //Home
            mueve_servo(&pata6[0], INICIO);
            mueve_servo(&pata6[1], INICIO);
            mueve_servo(&pata6[2], INICIO);
            break; 
        default:    //Home
            mueve_servo(&pata6[0], INICIO);
            mueve_servo(&pata6[1], INICIO);
            mueve_servo(&pata6[2], INICIO);
            break;           
    }
}

void hexapod_mov(int type){ //Función que hace el movimiento del hexápodo dependiendo de lo que se quiera hacer
    if(type == ARRIBA){
            //Rellenar el movimiento con las patas
    }else if(type == ABAJO){
            //Rellenar el movimiento con las patas
    }else if(type == HOME){
            //Rellenar el movimiento con las patas
    }else if(type == AVANZA){
            //Rellenar el movimiento con las patas
    }else if(type == RETROCEDE){
        //Rellenar el movimiento con las patas
    }else if(type == DERECHA){
        //Rellenar el movimiento con las patas
    }else if(type == IZQUIERDA){
        //Rellenar el movimiento con las patas
    }    
}