Piccolo, cuadrado, diagonal y circulo

Dependencies:   mbed

main.cpp

Committer:
brayanpaiba
Date:
2017-09-16
Revision:
0:e0c1f3f89b27

File content as of revision 0:e0c1f3f89b27:

#include "mbed.h"

PwmOut eje_x(PB_3);
PwmOut eje_y(PB_4);
PwmOut eje_z(PB_5);

double i=0,rad=0;
double pulso_us=0,RET_PRU=0,gain=15,b=10;
double grados=0,retardo_for=0.05,retardo=1,diam=70,var_x=0,var_y=0;

    

void REFERENCE(){
    eje_x.pulsewidth_us(1650);
    eje_y.pulsewidth_us(1635);
    eje_z.pulsewidth_us(750);
    wait_ms(500);
    }

    
void SERVO_X(){
    pulso_us=((grados*1700)/(180))+790; 
    eje_x.pulsewidth_us(pulso_us);
    wait_ms(0);
    }
    
void SERVO_Y(){
    pulso_us=((grados*1870)/(180))+700;
    eje_y.pulsewidth_us(pulso_us);
    wait_ms(0);
    }
    
void SERVO_Z(){
    pulso_us=((grados*1800)/(180))+650;  
    eje_z.pulsewidth_us(pulso_us);
    wait_ms(100);
    } 
    
void PruevaX(){
        grados=0;
        SERVO_X();
        wait_ms(RET_PRU);
    for(i=0;i<=90;i=i+10){
        grados=i;
        SERVO_X();
        wait_ms(retardo);
        }
        wait_ms(RET_PRU);
        grados=180;
        SERVO_X();
        wait_ms(RET_PRU);
    }
void PruevaY(){
        grados=0;
        SERVO_Y();
        wait_ms(RET_PRU);
    for(i=0;i<=90;i=i+10){
        grados=i;
        SERVO_Y();
        wait_ms(retardo);
        }
        wait_ms(RET_PRU);
        grados=180;
        SERVO_Y();
        wait_ms(RET_PRU);
    }
    
void ESCRIBIR(){
    grados=120;
    SERVO_Z();
    }

void ESCRIBIR_0(){
    grados=30;
    SERVO_Z();
    }
      
void LINEA_DIAG(){
    REFERENCE();
    wait(2);
    for(i=0;i<=1800;i=i+5){
        grados=i;
        SERVO_X();
        SERVO_Y();
        wait_ms(retardo);
        ESCRIBIR();
        }
    ESCRIBIR_0();
    }
    
void CUADRADO(){
    REFERENCE();
    grados=0;
    SERVO_X();
    SERVO_Y();
    wait(2);
    for(i=0;i<=180;i=i+5){
        grados=i;
        SERVO_Y();
        wait_ms(retardo);
        ESCRIBIR();        
        }
    for(i=0;i<=180;i=i+5){
        grados=i;
        SERVO_X();
        wait_ms(retardo);
        ESCRIBIR();
        }
    for(i=180;i>=0;i=i-5){
        grados=i;
        SERVO_Y();
        wait_ms(retardo);
        ESCRIBIR();
        }
    for(i=180;i>=0;i=i-5){
        grados=i;
        SERVO_X();
        wait_ms(retardo);
        ESCRIBIR();
        }
    for(i=180;i<=0;i=i+10){
        grados=i;
        SERVO_Y();
        wait_ms(retardo);
        ESCRIBIR();        
        }
    ESCRIBIR_0();
        }
void CIRCULO(){
    REFERENCE();
    wait(2);
    for(i=0;i<360;i=i+10){
        rad=(i*2*3.1416)/(180);
        grados=(((cos(rad)+1)*180/2)*140/180)+20;
        SERVO_X();
        grados=(((sin(rad)+1)*180/2)*140/180)+20;
        SERVO_Y();
        wait_ms(retardo);
        ESCRIBIR();
        }
    ESCRIBIR_0();
    }

void DIBUJO(){
    REFERENCE();
    wait(2);
    grados=0+gain;
    SERVO_X();
    SERVO_Y();
    ESCRIBIR();
    wait(retardo);
    
    grados=30+gain;
    SERVO_X();
    wait(retardo);
    
    grados=60+gain;
    SERVO_Y();
    wait(retardo);
    
    grados=90+gain;
    SERVO_X();
    wait(retardo);
    
    grados=120+gain;
    SERVO_Y();
    wait(retardo);
    
    grados=150+gain;
    SERVO_X();
    wait(retardo);
    
    grados=150+gain;
    SERVO_Y();
    wait(retardo);
    
    grados=120+gain-b;
    SERVO_X();
    wait(retardo);
    
    grados=90+gain-b;
    SERVO_Y();
    wait(retardo);
    
    grados=60+gain-b;
    SERVO_X();
    wait(retardo);
    
    grados=30+gain-b;
    SERVO_Y();
    wait(retardo);
    
    grados=0+gain-b;
    SERVO_X();
    wait(retardo);
    
    grados=0+gain-b;
    SERVO_Y();
    wait(retardo);

    ESCRIBIR_0();
    
    grados=150+gain;
    SERVO_Y();
    wait(retardo);
    
    grados=0+gain;
    SERVO_X();
    wait(retardo);
    
    ESCRIBIR();
    for(i=0;i<45;i++){
    grados=i+gain;
    SERVO_X();
    grados=150-i+gain;
    SERVO_Y();
    wait(retardo_for);
    }
    
    ESCRIBIR_0();
    
    grados=150+gain;
    SERVO_X();
    wait(retardo);

    grados=0+gain;
    SERVO_Y();
    wait(retardo);
    
    ESCRIBIR();
    for(i=0;i<45;i++){
    grados=150-i+gain;
    SERVO_X();
    grados=i+gain;
    SERVO_Y();
    wait(retardo_for);
        }
    
    ESCRIBIR_0();
        
    grados=150+gain;
    SERVO_X();
    wait(retardo);

    grados=60+gain;
    SERVO_Y();
    wait(retardo);
    
    for(i=180;i<360;i=i+5){
        rad=(i*3.1416)/(180);
        var_x=((cos(rad)+1)*diam/2)*1.0;
        grados=var_x+30+gain;
        SERVO_X();
        var_y=((sin(rad)+1)*diam/2)*1.5;
        grados=var_y+120+gain;
        SERVO_Y();
        ESCRIBIR();
        }
    ESCRIBIR_0();
    }
    
    
int main() {
        eje_x.period_us(20000);
        eje_y.period_us(20000);
        eje_z.period_us(20000);        
        REFERENCE();  
    
    while(1) { 
    
        DIBUJO(); 
        
        

}
}