Mateo Morales / Mbed 2 deprecated 00_LAB_COMMAND_SERVOfe

Dependencies:   mbed

Committer:
MateoMoralesV
Date:
Mon Feb 25 12:50:24 2019 +0000
Revision:
6:61fc60bf0f01
Parent:
5:f6be64b76f98
m

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);
MateoMoralesV 6:61fc60bf0f01 16 PwmOut myservo1(PB_3);
MateoMoralesV 6:61fc60bf0f01 17 PwmOut myservo2(PB_4);
MateoMoralesV 6:61fc60bf0f01 18 PwmOut myservo3(PA_9);
MateoMoralesV 6:61fc60bf0f01 19 PwmOut myservo4(PB_10);
MateoMoralesV 6:61fc60bf0f01 20
fabeltranm 0:a9181441db9b 21 /*INGRESE L A CONFIGURACION DE LOS MOTORES*/
fabeltranm 0:a9181441db9b 22
fabeltranm 2:fda902bed8c6 23 #define INITCMD 0xFF
fabeltranm 3:ed8f41c75a80 24 #define DEGREES_MAX 180
fabeltranm 1:b473a0ad2b83 25 // definición de las variables globales
fabeltranm 0:a9181441db9b 26
fabeltranm 2:fda902bed8c6 27 uint8_t N_motor; // almacena el número de motor
fabeltranm 2:fda902bed8c6 28 uint8_t N_grados; // almacena los grados que se mueve el motor
fabeltranm 0:a9181441db9b 29
fabeltranm 0:a9181441db9b 30
fabeltranm 3:ed8f41c75a80 31 // definición de las funciones
fabeltranm 0:a9181441db9b 32 void setup_uart();
fabeltranm 1:b473a0ad2b83 33 void setup_servo();
fabeltranm 4:136a0aeb7d51 34
fabeltranm 1:b473a0ad2b83 35 void mover_servo(uint8_t motor, uint8_t gradss);
fabeltranm 4:136a0aeb7d51 36 uint32_t degrees2usec(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();
fabeltranm 4:136a0aeb7d51 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);
fabeltranm 1:b473a0ad2b83 62 }
fabeltranm 1:b473a0ad2b83 63
fabeltranm 1:b473a0ad2b83 64 void leer_datos(){
fabeltranm 2:fda902bed8c6 65 while(command.getc()!= INITCMD);
fabeltranm 2:fda902bed8c6 66 N_motor=command.getc();
fabeltranm 2:fda902bed8c6 67 N_grados=command.getc();
fabeltranm 0:a9181441db9b 68
fabeltranm 1:b473a0ad2b83 69 }
fabeltranm 1:b473a0ad2b83 70
fabeltranm 1:b473a0ad2b83 71
fabeltranm 4:136a0aeb7d51 72
fabeltranm 4:136a0aeb7d51 73
fabeltranm 4:136a0aeb7d51 74 void mover_servo(uint8_t motor, uint8_t grados){
fabeltranm 4:136a0aeb7d51 75
fabeltranm 4:136a0aeb7d51 76 uint32_t dpulse=0;
fabeltranm 4:136a0aeb7d51 77
fabeltranm 4:136a0aeb7d51 78 /* complementar el código necesario
fabeltranm 4:136a0aeb7d51 79 tip: deben pasar grados a microsegundo */
MateoMoralesV 5:f6be64b76f98 80 //fghgfhfgdhfdghfghg
fabeltranm 4:136a0aeb7d51 81
MateoMoralesV 6:61fc60bf0f01 82 dpulse=degrees2usec(grados);
MateoMoralesV 6:61fc60bf0f01 83 myservo1.pulsewidth_us(dpulse);
fabeltranm 4:136a0aeb7d51 84
fabeltranm 4:136a0aeb7d51 85 }
fabeltranm 4:136a0aeb7d51 86
fabeltranm 3:ed8f41c75a80 87 uint32_t degrees2usec(uint8_t grados){
fabeltranm 3:ed8f41c75a80 88 // Retorno el valor en usegundos, donde
fabeltranm 3:ed8f41c75a80 89 // y − y1 = m(x − x1 )
fabeltranm 3:ed8f41c75a80 90 if(grados <= DEGREES_MAX)
MateoMoralesV 6:61fc60bf0f01 91 return int(500+grados*2400/180);// u6
MateoMoralesV 6:61fc60bf0f01 92 return 500;
fabeltranm 3:ed8f41c75a80 93
fabeltranm 4:136a0aeb7d51 94 }