Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp
00001 #include "mbed.h" 00002 #include "Motor.h" 00003 #include "QEI.h" 00004 00005 // declaramos los encoders 00006 QEI enc1(PG_4, PG_6, NC, 480, QEI::X4_ENCODING); // (P0, P1, indice, PulsosPorRev, TipoDeEncoder) 00007 QEI enc2(PG_7, PG_5, NC, 480, QEI::X4_ENCODING); 00008 QEI enc3(PD_10, PG_8, NC, 480, QEI::X4_ENCODING); 00009 QEI enc4(PG_14, PF_11, NC, 480, QEI::X4_ENCODING); 00010 QEI enc5(PF_12, PF_15, NC, 480, QEI::X4_ENCODING); 00011 QEI enc6(PF_13, PF_3, NC, 240, QEI::X4_ENCODING); 00012 00013 // declaramos los motores 00014 Motor m1(PA_5, PC_8, PC_6); // (pwm, derecho, inverso) 00015 Motor m2(PA_6, PC_5, PD_8); 00016 Motor m3(PA_7, PA_12, PA_11); 00017 Motor m4(PB_6, PB_12, PB_11); 00018 Motor m5(PC_7, PB_2, PB_1); 00019 Motor m6(PB_9, PB_15, PB_13); 00020 Motor cinta(PB_8, PC_4, PF_5); 00021 00022 // declaramos las entradas de los micropulsadores 00023 DigitalIn mp1(PA_9, PullUp); // (pin, modo) 00024 DigitalIn mp2(PA_8, PullUp); 00025 DigitalIn mp3(PB_10, PullUp); 00026 DigitalIn mp4(PB_4, PullUp); 00027 DigitalIn mp5(PB_5, PullUp); 00028 DigitalIn sensor(PB_3, PullUp); 00029 00030 // declaramos el bluetooth 00031 Serial bt(PA_2, PA_3); // (RX, TX) (puerto serial 2) 00032 00033 // declaramos otras variables que utilizaremos 00034 Ticker ticker1; // iniciamos tickers 00035 DigitalOut led1 (LED1); // declaramos el LED1 00036 DigitalOut led2 (LED2); // declaramos el LED2 00037 DigitalOut led3 (LED3); // declaramos el LED3 00038 int pulsos[6]={0,0,0,0,0,0}; // iniciamos el array pulsos 00039 int posiciones[10]; // declaramos el array de posiciones 00040 char dato=0; 00041 00042 // declaramos el prototipo de las funciones que utilizaremos 00043 void enviar_bt(); // prototipo de la funcion que ejecutara el ticker1 00044 void posicion(); // prototipo de la funcion que nos llevara hasta la posicion especificada 00045 void mover(int,int,float); // prototipo de la funcion que movera cada motor 00046 void frenar(int); // prototipo de la funcion que frenara cada motor 00047 void pinza(int); // prototipo de la funcion que abrira (-1) o cerrara (1) la pinza 00048 void movCinta(); // prototipo de la funcion que avanzara la cinta hasta detectar un objeto 00049 00050 int main() 00051 { 00052 m1.period(0.0001); // establece el periodo del PWM, equivalente a una frecuencia de 10KHz. 00053 m2.period(0.0001); 00054 m3.period(0.0001); 00055 m4.period(0.0001); 00056 m5.period(0.0001); 00057 m6.period(0.0001); 00058 00059 bt.baud(9600); // velocidad de transmision del bluetooth a 9600 baudios 00060 00061 ticker1.attach(&enviar_bt, 0.5); // asignamos la funcion "enviar_bt" al protocolo de interrupcion del "ticker1" y le damos un intervalo de 0.5s 00062 00063 while(1) 00064 { 00065 if(bt.readable()>0) 00066 { 00067 dato = bt.getc(); 00068 switch(dato) 00069 { 00070 case 'A': 00071 mover(1,1,1); 00072 wait(0.2); 00073 frenar(1); 00074 break; 00075 case 'B': 00076 mover(1,-1,1); 00077 wait(0.2); 00078 frenar(1); 00079 break; 00080 case 'C': 00081 mover(2,1,1); 00082 wait(0.2); 00083 frenar(2); 00084 break; 00085 case 'D': 00086 mover(2,-1,1); 00087 wait(0.2); 00088 frenar(2); 00089 break; 00090 case 'E': 00091 mover(3,1,1); 00092 wait(0.2); 00093 frenar(3); 00094 break; 00095 case 'F': 00096 mover(3,-1,1); 00097 wait(0.2); 00098 frenar(3); 00099 break; 00100 case 'G': 00101 mover(4,1,1); 00102 wait(0.2); 00103 frenar(4); 00104 break; 00105 case 'H': 00106 mover(4,-1,1); 00107 wait(0.2); 00108 frenar(4); 00109 break; 00110 case 'I': 00111 mover(5,1,1); 00112 wait(0.2); 00113 frenar(5); 00114 break; 00115 case 'J': 00116 mover(5,-1,1); 00117 wait(0.2); 00118 frenar(5); 00119 break; 00120 case 'K': 00121 pinza(-1); 00122 break; 00123 case 'L': 00124 pinza(1); 00125 break; 00126 case 'M': 00127 movCinta(); 00128 break; 00129 } 00130 } 00131 } 00132 } 00133 00134 void enviar_bt() // definimos la funcion que ejecutara el ticker 00135 { 00136 pulsos[1]=enc1.getPulses(); 00137 pulsos[2]=enc2.getPulses(); 00138 pulsos[3]=enc3.getPulses(); 00139 pulsos[4]=enc4.getPulses(); 00140 pulsos[5]=enc5.getPulses(); 00141 bt.printf(" pulsos encoder 1:%d\n pulsos encoder 2:%d\n pulsos encoder 3:%d\n pulsos encoder 4:%d\n pulsos encoder 5:%d\n", pulsos[1],pulsos[2],pulsos[3],pulsos[4],pulsos[5]); // envia el valor de "pulsos" por bluetooth 00142 } 00143 00144 void posicion(int pos) 00145 { 00146 00147 } 00148 00149 void mover(int m, int dir, float v) 00150 { 00151 if((dir==1 || dir==(-1))&&(v>0 && v<=1)) //comprueva que los parametros pasados estan dentro de los valores deseados 00152 { 00153 switch (m) 00154 { 00155 case 0: // en caso de que el valor sea 0 movemos todos los motores 00156 m1.speed(dir*v); 00157 m2.speed(dir*v); 00158 m3.speed(dir*v); 00159 m4.speed(dir*v); 00160 m5.speed(dir*v); 00161 break; 00162 case 1: // en caso de que el valor sea 1 movemos el motor 1 (base) 00163 m1.speed(dir*v); 00164 break; 00165 case 2: // en caso de que el valor sea 2 movemos el motor 2 (hombro) 00166 m2.speed(dir*v); 00167 break; 00168 case 3: // en caso de que el valor sea 3 movemos el motor 3 (codo) 00169 m3.speed(dir*v); 00170 break; 00171 case 4: // en caso de que el valor sea 4 movemos el motor 4 en un sentido y el 5 en el otro (girar muñeca) 00172 m4.speed((-1)*dir*v); 00173 m5.speed(dir*v); 00174 break; 00175 case 5: // en caso de que el valor sea 5 movemos los motores 4 y 5 en el mismo sentido (rotar muñeca) 00176 m4.speed(dir*v); 00177 m5.speed(dir*v); 00178 break; 00179 case 6: // en caso de que el valor sea 6 movemos el motor 6 (pinza) 00180 m6.speed(dir*v); 00181 break; 00182 } 00183 } 00184 else // si los parametros no son correctos encendemos el LED3 00185 led3=1; 00186 } 00187 00188 void pinza(int a) 00189 { 00190 int enc=0, encOld=0; 00191 mover(6,a,1); // movemos la pinza 00192 encOld=enc6.getPulses(); // leemos la posicion del encoder 00193 wait(0.1); // espera 0.1s 00194 enc=enc6.getPulses(); // leemos la posicion nueva del encoder 00195 while(enc != encOld) // mientras la posicion antigua sea distinta de la nueva seguimos leyendo 00196 { 00197 wait(0.1); // espera 0.1s 00198 encOld=enc; // guardamos la posicion antigua del encoder 00199 enc=enc6.getPulses(); // leemos la posicion nueva del encoder 00200 } 00201 frenar(6); // cuando la pinza ha llegado al tope frenamos la pinza 00202 } 00203 00204 void frenar(int m) 00205 { 00206 switch(m) 00207 { 00208 case 0: // en caso de que el valor sea 0 frenamos todos los motores 00209 m1.brake(); 00210 m2.brake(); 00211 m3.brake(); 00212 m4.brake(); 00213 m5.brake(); 00214 m6.brake(); 00215 break; 00216 case 1: // en caso de que el valor sea 1 frenamos el motor 1 00217 m1.brake(); 00218 break; 00219 case 2: // en caso de que el valor sea 2 frenamos el motor 2 00220 m2.brake(); 00221 break; 00222 case 3: // en caso de que el valor sea 3 frenamos el motor 3 00223 m3.brake(); 00224 break; 00225 case 4: // en caso de que el valor sea 4 frenamos los motores 4 y 5 00226 m4.brake(); 00227 m5.brake(); 00228 break; 00229 case 5: // en caso de que el valor sea 5 frenamos los motores 4 y 5 00230 m4.brake(); 00231 m5.brake(); 00232 break; 00233 case 6: // en caso de que el valor sea 6 frenamos el motor 6 00234 m6.brake(); 00235 break; 00236 } 00237 } 00238 void movCinta() 00239 { 00240 while (sensor==1) 00241 cinta.speed(1); 00242 cinta.brake(); 00243 } 00244 00245 00246
Generated on Tue Jul 12 2022 18:14:20 by
1.7.2