Controla un motor DC vidireccional y lee los pulsos del encoder. Gira el motor al derecho hasta llegar a un recorrido especifico y luego lo gira al reves hasta llegar al punto inicial.
main.cpp
00001 #include "mbed.h" 00002 #include "Motor.h" 00003 #include "QEI.h" 00004 00005 QEI encoder1(PE_11, PE_9, NC, 6, QEI::X4_ENCODING); // (P0, P1, indice, PulsosPorRev, TipoDeEncoder) 00006 Motor motor1(PE_13, PF_15, PG_14); // (pwm, derecho, inverso) 00007 Serial bt(PE_8, PE_7); // RX, TX (serial 5) 00008 Ticker ticker1; // iniciamos un ticker 00009 DigitalOut led1(LED1); // definimos la salida del LED 00010 int pulsos = 0; // numero de pulsos recorridos 00011 00012 void enviar_bt(); // declaramos el prototipo de la funcion que ejecutara el ticker 00013 00014 int main() 00015 { 00016 motor1.period(0.001); // establece el periodo del PWM, equivalente a una frecuencia de 20KHz. 00017 bt.baud(9600); // velocidad de transmision del bluetooth a 9600 baudios 00018 int recorrido = 240; // pulsos que queremos que recorra (modificaremos este valor hasta saber cuantos pulsos corresponden a una vuelta) 00019 ticker1.attach(&enviar_bt, 0.1); // asignamos la funcion "enviar_bt" a la interrupcion del "ticker1" y le damos un intervalo de 0.1s 00020 00021 led1 = 1; // encendemos un led de la placa durante 1s para asegurarnos de que el programa se esta ejecutando correctamente 00022 wait(1); 00023 led1 = 0; 00024 00025 while(pulsos<recorrido) // gira el motor al derecho hasta que los pulsos sean los del recorrido asignado 00026 { 00027 motor1.speed(0.4); 00028 pulsos= encoder1.getPulses(); 00029 } 00030 00031 motor1.brake(); // frena el motor y enciende un led 1s para saber que hemos llegado al punto deseado 00032 led1 = 1; 00033 wait(1); 00034 led1 = 0; 00035 wait(1); 00036 00037 while(pulsos>0) // gira el motor al inverso hasta que los pulsos sean 0 00038 { 00039 motor1.speed(-0.4); 00040 pulsos= encoder1.getPulses(); 00041 } 00042 00043 motor1.brake(); // frena el motor y deja encendido un led para saber que hemos llegado al punto deseado 00044 led1 = 1; 00045 } 00046 00047 void enviar_bt() // definimos la funcion que ejecutara el ticker 00048 { 00049 bt.printf("%d", pulsos); // envia el valor de "pulsos" por bluetooth 00050 }
Generated on Tue Aug 9 2022 23:44:47 by 1.7.2