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

Committer:
javierjsp
Date:
Sun May 14 12:34:49 2017 +0000
Revision:
4:33df694ea769
Parent:
3:129c10cc04e2
a?adido un ticker para enviar el valor de pulsos por bluetooth

Who changed what in which revision?

UserRevisionLine numberNew contents of line
javierjsp 0:6d89fbfb2082 1 #include "mbed.h"
javierjsp 0:6d89fbfb2082 2 #include "Motor.h"
javierjsp 0:6d89fbfb2082 3 #include "QEI.h"
javierjsp 0:6d89fbfb2082 4
javierjsp 4:33df694ea769 5 QEI encoder1(PE_11, PE_9, NC, 6, QEI::X4_ENCODING); // (P0, P1, indice, PulsosPorRev, TipoDeEncoder)
javierjsp 0:6d89fbfb2082 6 Motor motor1(PE_13, PF_15, PG_14); // (pwm, derecho, inverso)
javierjsp 4:33df694ea769 7 Serial bt(PE_8, PE_7); // RX, TX (serial 5)
javierjsp 4:33df694ea769 8 Ticker ticker1; // iniciamos un ticker
javierjsp 0:6d89fbfb2082 9 DigitalOut led1(LED1); // definimos la salida del LED
javierjsp 4:33df694ea769 10 int pulsos = 0; // numero de pulsos recorridos
javierjsp 4:33df694ea769 11
javierjsp 4:33df694ea769 12 void enviar_bt(); // declaramos el prototipo de la funcion que ejecutara el ticker
javierjsp 0:6d89fbfb2082 13
javierjsp 0:6d89fbfb2082 14 int main()
javierjsp 0:6d89fbfb2082 15 {
javierjsp 4:33df694ea769 16 motor1.period(0.001); // establece el periodo del PWM, equivalente a una frecuencia de 20KHz.
javierjsp 0:6d89fbfb2082 17 bt.baud(9600); // velocidad de transmision del bluetooth a 9600 baudios
javierjsp 0:6d89fbfb2082 18 int recorrido = 240; // pulsos que queremos que recorra (modificaremos este valor hasta saber cuantos pulsos corresponden a una vuelta)
javierjsp 4:33df694ea769 19 ticker1.attach(&enviar_bt, 0.1); // asignamos la funcion "enviar_bt" a la interrupcion del "ticker1" y le damos un intervalo de 0.1s
javierjsp 0:6d89fbfb2082 20
javierjsp 0:6d89fbfb2082 21 led1 = 1; // encendemos un led de la placa durante 1s para asegurarnos de que el programa se esta ejecutando correctamente
javierjsp 0:6d89fbfb2082 22 wait(1);
javierjsp 0:6d89fbfb2082 23 led1 = 0;
javierjsp 0:6d89fbfb2082 24
javierjsp 0:6d89fbfb2082 25 while(pulsos<recorrido) // gira el motor al derecho hasta que los pulsos sean los del recorrido asignado
javierjsp 0:6d89fbfb2082 26 {
javierjsp 4:33df694ea769 27 motor1.speed(0.4);
javierjsp 4:33df694ea769 28 pulsos= encoder1.getPulses();
javierjsp 0:6d89fbfb2082 29 }
javierjsp 0:6d89fbfb2082 30
javierjsp 0:6d89fbfb2082 31 motor1.brake(); // frena el motor y enciende un led 1s para saber que hemos llegado al punto deseado
javierjsp 0:6d89fbfb2082 32 led1 = 1;
javierjsp 0:6d89fbfb2082 33 wait(1);
javierjsp 0:6d89fbfb2082 34 led1 = 0;
javierjsp 0:6d89fbfb2082 35 wait(1);
javierjsp 0:6d89fbfb2082 36
javierjsp 0:6d89fbfb2082 37 while(pulsos>0) // gira el motor al inverso hasta que los pulsos sean 0
javierjsp 0:6d89fbfb2082 38 {
javierjsp 0:6d89fbfb2082 39 motor1.speed(-0.4);
javierjsp 0:6d89fbfb2082 40 pulsos= encoder1.getPulses();
javierjsp 0:6d89fbfb2082 41 }
javierjsp 0:6d89fbfb2082 42
javierjsp 0:6d89fbfb2082 43 motor1.brake(); // frena el motor y deja encendido un led para saber que hemos llegado al punto deseado
javierjsp 0:6d89fbfb2082 44 led1 = 1;
javierjsp 0:6d89fbfb2082 45 }
javierjsp 4:33df694ea769 46
javierjsp 4:33df694ea769 47 void enviar_bt() // definimos la funcion que ejecutara el ticker
javierjsp 4:33df694ea769 48 {
javierjsp 4:33df694ea769 49 bt.printf("%d", pulsos); // envia el valor de "pulsos" por bluetooth
javierjsp 4:33df694ea769 50 }