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.
Diff: main.cpp
- Revision:
- 0:6d89fbfb2082
- Child:
- 2:481289ca3336
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Tue Apr 11 19:56:19 2017 +0000 @@ -0,0 +1,44 @@ +#include "mbed.h" +#include "Motor.h" +#include "QEI.h" + +QEI encoder1(PE_11, PE_9, NC, 6, QEI::X4_ENCODING); // (A, B, indice, PulsosPorRev, TipoDeEncoder) +Motor motor1(PE_13, PF_15, PG_14); // (pwm, derecho, inverso) +Serial bt(PE_8, PE_7); // tx, rx (serial 5) +DigitalOut led1(LED1); // definimos la salida del LED + +int main() +{ + motor1.period(0.00005); // establece el periodo del PWM, equivalente a una frecuencia de 20KHz. + bt.baud(9600); // velocidad de transmision del bluetooth a 9600 baudios + int pulsos = 0; // numero de pulsos recorridos + int recorrido = 240; // pulsos que queremos que recorra (modificaremos este valor hasta saber cuantos pulsos corresponden a una vuelta) + bt.printf(pulsos); // envia el valor de "pulsos" por bluetooth + + led1 = 1; // encendemos un led de la placa durante 1s para asegurarnos de que el programa se esta ejecutando correctamente + wait(1); + led1 = 0; + + while(pulsos<recorrido) // gira el motor al derecho hasta que los pulsos sean los del recorrido asignado + { + motor1.speed(0.4); + pulsos= encoder1.getPulses(); + bt.printf(pulsos); // envia el valor de "pulsos" por bluetooth + } + + motor1.brake(); // frena el motor y enciende un led 1s para saber que hemos llegado al punto deseado + led1 = 1; + wait(1); + led1 = 0; + wait(1); + + while(pulsos>0) // gira el motor al inverso hasta que los pulsos sean 0 + { + motor1.speed(-0.4); + pulsos= encoder1.getPulses(); + } + + motor1.brake(); // frena el motor y deja encendido un led para saber que hemos llegado al punto deseado + led1 = 1; + +}