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

Files at this revision

API Documentation at this revision

Comitter:
javierjsp
Date:
Sun May 14 12:34:49 2017 +0000
Parent:
3:129c10cc04e2
Commit message:
a?adido un ticker para enviar el valor de pulsos por bluetooth

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
diff -r 129c10cc04e2 -r 33df694ea769 main.cpp
--- a/main.cpp	Thu Apr 27 17:02:35 2017 +0000
+++ b/main.cpp	Sun May 14 12:34:49 2017 +0000
@@ -2,18 +2,21 @@
 #include "Motor.h"
 #include "QEI.h"
 
-QEI encoder1(PE_11, PE_9, NC, 6, QEI::X4_ENCODING);     // (A, B, indice, PulsosPorRev, TipoDeEncoder)
+QEI encoder1(PE_11, PE_9, NC, 6, QEI::X4_ENCODING);     // (P0, P1, indice, PulsosPorRev, TipoDeEncoder)
 Motor motor1(PE_13, PF_15, PG_14);      // (pwm, derecho, inverso)
-Serial bt(PE_8, PE_7);                  // tx, rx (serial 5)
+Serial bt(PE_8, PE_7);                  // RX, TX (serial 5)
+Ticker ticker1;                         // iniciamos un ticker
 DigitalOut led1(LED1);                  // definimos la salida del LED
+int pulsos  = 0;        // numero de pulsos recorridos
+
+void enviar_bt();       // declaramos el prototipo de la funcion que ejecutara el ticker
 
 int main() 
 {
-    motor1.period(0.00005); // establece el periodo del PWM, equivalente a una frecuencia de 20KHz.
+    motor1.period(0.001);   // 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("%d", pulsos);      // envia el valor de "pulsos" por bluetooth
+    ticker1.attach(&enviar_bt, 0.1);    // asignamos la funcion "enviar_bt" a la interrupcion del "ticker1" y le damos un intervalo de 0.1s
     
     led1 = 1;       // encendemos un led de la placa durante 1s para asegurarnos de que el programa se esta ejecutando correctamente
     wait(1);
@@ -21,9 +24,8 @@
     
     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("%d", pulsos);                // envia el valor de "pulsos" por bluetooth
+        motor1.speed(0.4);
+        pulsos= encoder1.getPulses();
     }
     
     motor1.brake();         // frena el motor y enciende un led 1s para saber que hemos llegado al punto deseado
@@ -40,5 +42,9 @@
     
     motor1.brake();         // frena el motor y deja encendido un led para saber que hemos llegado al punto deseado
     led1 = 1;
-    
 }
+
+void enviar_bt()            // definimos la funcion que ejecutara el ticker
+{
+      bt.printf("%d", pulsos);                // envia el valor de "pulsos" por bluetooth
+}