
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@4:33df694ea769, 2017-05-14 (annotated)
- 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?
User | Revision | Line number | New 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 | } |