Julian Barrero / Mbed 2 deprecated programa_servo

Dependencies:   mbed

Committer:
barrero_99
Date:
Fri Mar 01 12:44:03 2019 +0000
Revision:
5:ee733f4b9ea7
Parent:
4:136a0aeb7d51
inicio

Who changed what in which revision?

UserRevisionLine numberNew contents of line
fabeltranm 0:a9181441db9b 1 #include "mbed.h"
fabeltranm 0:a9181441db9b 2
fabeltranm 0:a9181441db9b 3 /*****************************************************************************
fabeltranm 0:a9181441db9b 4 generar un programa que controle por el puerto serial el grado de 4 servo motores
fabeltranm 0:a9181441db9b 5 por medio de la comunicacion serial donde el comando sea
fabeltranm 0:a9181441db9b 6
fabeltranm 0:a9181441db9b 7 | | | |
fabeltranm 2:fda902bed8c6 8 | INITCMD | N_motor | N_grados |
fabeltranm 0:a9181441db9b 9 | 0xff | 0x01- 0x04 | 0x00 - 0xb4 |
fabeltranm 0:a9181441db9b 10
fabeltranm 0:a9181441db9b 11 para enviar los comandos usar el programa Coolterm
fabeltranm 0:a9181441db9b 12 *****************************************************************************/
fabeltranm 0:a9181441db9b 13
fabeltranm 0:a9181441db9b 14
fabeltranm 0:a9181441db9b 15 Serial command(USBTX, USBRX);
fabeltranm 0:a9181441db9b 16 PwmOut myservo1(PB_4);
barrero_99 5:ee733f4b9ea7 17 PwmOut myservo2(PB_5);
barrero_99 5:ee733f4b9ea7 18 PwmOut myservo3(PB_10);
barrero_99 5:ee733f4b9ea7 19 PwmOut myservo4(PB_3);
barrero_99 5:ee733f4b9ea7 20 PwmOut myservo5(PB_6);
barrero_99 5:ee733f4b9ea7 21
fabeltranm 0:a9181441db9b 22 /*INGRESE L A CONFIGURACION DE LOS MOTORES*/
fabeltranm 0:a9181441db9b 23
fabeltranm 2:fda902bed8c6 24 #define INITCMD 0xFF
fabeltranm 3:ed8f41c75a80 25 #define DEGREES_MAX 180
fabeltranm 1:b473a0ad2b83 26 // definición de las variables globales
fabeltranm 0:a9181441db9b 27
fabeltranm 2:fda902bed8c6 28 uint8_t N_motor; // almacena el número de motor
fabeltranm 2:fda902bed8c6 29 uint8_t N_grados; // almacena los grados que se mueve el motor
barrero_99 5:ee733f4b9ea7 30 uint8_t N_tm; //tipo de motor
fabeltranm 0:a9181441db9b 31
fabeltranm 3:ed8f41c75a80 32 // definición de las funciones
fabeltranm 0:a9181441db9b 33 void setup_uart();
fabeltranm 1:b473a0ad2b83 34 void setup_servo();
fabeltranm 4:136a0aeb7d51 35
barrero_99 5:ee733f4b9ea7 36 void mover_servo(uint8_t motor, uint8_t grados);
fabeltranm 4:136a0aeb7d51 37
fabeltranm 1:b473a0ad2b83 38 void leer_datos();
fabeltranm 0:a9181441db9b 39
fabeltranm 4:136a0aeb7d51 40
fabeltranm 4:136a0aeb7d51 41
fabeltranm 0:a9181441db9b 42 int main() {
fabeltranm 1:b473a0ad2b83 43
fabeltranm 1:b473a0ad2b83 44 setup_uart();
fabeltranm 1:b473a0ad2b83 45 setup_servo();
barrero_99 5:ee733f4b9ea7 46 // command.printf("inicio de programa");
fabeltranm 1:b473a0ad2b83 47 while(1){
fabeltranm 1:b473a0ad2b83 48 leer_datos();
fabeltranm 2:fda902bed8c6 49 mover_servo(N_motor, N_grados);
fabeltranm 4:136a0aeb7d51 50 }
fabeltranm 1:b473a0ad2b83 51 }
fabeltranm 1:b473a0ad2b83 52
fabeltranm 1:b473a0ad2b83 53
fabeltranm 1:b473a0ad2b83 54
fabeltranm 1:b473a0ad2b83 55 void setup_uart(){
fabeltranm 1:b473a0ad2b83 56 command.baud(115200);
fabeltranm 1:b473a0ad2b83 57 }
fabeltranm 1:b473a0ad2b83 58
fabeltranm 1:b473a0ad2b83 59 void setup_servo(){
fabeltranm 0:a9181441db9b 60 myservo1.period_ms(20);
fabeltranm 1:b473a0ad2b83 61 myservo1.pulsewidth_us(1000);
barrero_99 5:ee733f4b9ea7 62 myservo2.period_ms(20);
barrero_99 5:ee733f4b9ea7 63 myservo2.pulsewidth_us(1000);
barrero_99 5:ee733f4b9ea7 64 myservo3.period_ms(20);
barrero_99 5:ee733f4b9ea7 65 myservo3.pulsewidth_us(1000);
barrero_99 5:ee733f4b9ea7 66 myservo4.period_ms(20);
barrero_99 5:ee733f4b9ea7 67 myservo4.pulsewidth_us(1000);
barrero_99 5:ee733f4b9ea7 68 myservo5.period_ms(20);
barrero_99 5:ee733f4b9ea7 69 myservo5.pulsewidth_us(1000);
fabeltranm 1:b473a0ad2b83 70 }
fabeltranm 1:b473a0ad2b83 71
fabeltranm 1:b473a0ad2b83 72 void leer_datos(){
fabeltranm 2:fda902bed8c6 73 while(command.getc()!= INITCMD);
fabeltranm 2:fda902bed8c6 74 N_motor=command.getc();
fabeltranm 2:fda902bed8c6 75 N_grados=command.getc();
fabeltranm 0:a9181441db9b 76
fabeltranm 1:b473a0ad2b83 77 }
fabeltranm 1:b473a0ad2b83 78
barrero_99 5:ee733f4b9ea7 79 uint32_t degrees2usec(uint8_t grados,uint8_t tm){
barrero_99 5:ee733f4b9ea7 80 // Retorno el valor en usegundos, donde
barrero_99 5:ee733f4b9ea7 81 // y − y1 = m(x − x1 )
barrero_99 5:ee733f4b9ea7 82 if(grados <= DEGREES_MAX)
barrero_99 5:ee733f4b9ea7 83 if (tm==0)return int(700+grados*1700/180);// u6
barrero_99 5:ee733f4b9ea7 84 else return int(700+grados*1700/180);// u6
barrero_99 5:ee733f4b9ea7 85 return 700;
barrero_99 5:ee733f4b9ea7 86
barrero_99 5:ee733f4b9ea7 87 }
fabeltranm 4:136a0aeb7d51 88
fabeltranm 4:136a0aeb7d51 89
fabeltranm 4:136a0aeb7d51 90 void mover_servo(uint8_t motor, uint8_t grados){
fabeltranm 4:136a0aeb7d51 91
fabeltranm 4:136a0aeb7d51 92 uint32_t dpulse=0;
fabeltranm 4:136a0aeb7d51 93
fabeltranm 4:136a0aeb7d51 94 /* complementar el código necesario
fabeltranm 4:136a0aeb7d51 95 tip: deben pasar grados a microsegundo */
fabeltranm 4:136a0aeb7d51 96
barrero_99 5:ee733f4b9ea7 97 dpulse=degrees2usec(grados);
barrero_99 5:ee733f4b9ea7 98 if (motor==1)
barrero_99 5:ee733f4b9ea7 99 myservo1.pulsewidth_us(dpulse);
barrero_99 5:ee733f4b9ea7 100 if (motor==2)
barrero_99 5:ee733f4b9ea7 101 myservo2.pulsewidth_us(dpulse);
barrero_99 5:ee733f4b9ea7 102 if (motor==3)
barrero_99 5:ee733f4b9ea7 103 myservo3.pulsewidth_us(dpulse);
barrero_99 5:ee733f4b9ea7 104 if (motor==4)
barrero_99 5:ee733f4b9ea7 105 myservo4.pulsewidth_us(dpulse);
barrero_99 5:ee733f4b9ea7 106 if (motor==5)
barrero_99 5:ee733f4b9ea7 107 myservo5.pulsewidth_us(dpulse);
fabeltranm 4:136a0aeb7d51 108 }
fabeltranm 4:136a0aeb7d51 109
fabeltranm 4:136a0aeb7d51 110