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.

Dependencies:   Motor QEI mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

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 }