First release.

Dependencies:   FXOS8700CQ SDFileSystem mbed

Final program

  • Controling a robot by Bluetooth, it is capable of making 90° turns and move pre-defined distances.

Code by:

  • Mayumi Hori
  • Sarahí Morán
  • Gerardo Carmona
Revision:
3:bd16e43ad7be
Parent:
2:94059cb643be
Child:
4:c60636c95b80
--- a/main.cpp	Thu Oct 16 17:30:52 2014 +0000
+++ b/main.cpp	Fri Oct 17 06:21:52 2014 +0000
@@ -5,12 +5,16 @@
     the magnometer. It will report data from the encoders and limit the movement by
     the ultrasonic sensors
     
+    
     COMPONENTS:
     * Bluetooth
     * Magnometer            (FXOS8700CQ & magnometer.h)
     * Motors                (motors.h)
-    * Encoder   
+    * Encoder               (encoder.h)
     * Ultrasonic sensors    (motors.h)
+    * SD Card               (sd_card.h & SDFileSystem)
+    * xbee                  (xbee.h)
+    
     
     CONTROLS:
     w: foward
@@ -20,16 +24,20 @@
     o: 90° left turn
     p: 90° right turn
     
+    
     Credits:
     * Mayumi Haro
     * Sarahí Morán
     * Gerardo Carmona
     
     VERSION:
-    1.2 - 10/16/14
+    1.3 - 10/17/14
+    
     
-
     HISTORY:
+    1.3 - 10/17/14
+    (+) Added nuw functions
+    
     1.2 - 10/16/14
     (+) Added xbee, ultrasonic, sd_card
     
@@ -50,31 +58,44 @@
 #include "encoder.h"
 #include "sd_card.h"
 #include "xbee.h"
+#include "encoders.h"
+#include "ultrasonic.h"
 
 // ----- Constants ------------------------------------------------------------------
 #define LED_ERROR       6
 #define LED_NORMAL      5
 #define LED_BUSY        3
-#define BT_TIME         100
+// Motores
+#define MOVE_FWD_F      'W'
+#define MOVE_REV_F      'S'
+#define MOVE_LEF_F      'A'
+#define MOVE_RIG_F      'D'
+#define MOVE_FWD_S      'w'
+#define MOVE_REV_S      's'
+#define MOVE_LEF_S      'a'
+#define MOVE_RIG_S      'd'
+#define MOVE_STO        'q'
+#define MOVE_90L        'o'
+#define MOVE_90R        'p'
+// Otros
+#define reset_encoders  'r'
+#define request_data    'm'
+#define encoder_rigth   1
+#define encoder_left    2
 
 // ----- I/O Pins -------------------------------------------------------------------
 Serial pc(USBTX, USBRX);
 Serial bt(PTC15, PTC14);
-//FXOS8700CQ fxos(PTE25, PTE24, FXOS8700CQ_SLAVE_ADDR1); // SDA, SCL, (addr << 1)
 // Leds for status
 BusOut leds(LED_RED, LED_GREEN, LED_BLUE);
 
 // Sensors
-//AnalogIn current_left(A0);
-//AnalogIn current_left(A1);
 AnalogIn ultra_left(A2);
 AnalogIn ultra_right(A3);
-DigitalIn encoder_left(D3);
-DigitalIn encoder_right(D4);
+//DigitalIn encoder_left(D3);
+//DigitalIn encoder_right(D4);
 
 // ----- Others ---------------------------------------------------------------------
-//SRAWDATA accel_data;
-//SRAWDATA magn_data;
 Timer bt_timer;
 Timer gps_timer;
 
@@ -82,35 +103,84 @@
 char bt_data;
 
 // ----- Function prototypes --------------------------------------------------------
-//double get_mag_x();
-//double get_mag_y();
-//double get_mag_angle();                             // Read angle from the compass
-char read_bt();
+void read_bt();
+void command_bt(char _command);
+void send_all_data();
 
 // ----- Main program ---------------------------------------------------------------
 int main(){
+    init_encoders();
     bt.baud(9600); 
     pc.baud(9600);
-    //fxos.enable();
     leds = LED_NORMAL;
-    bt_timer.start();
     while (true){
-        if (bt_timer.read_ms() >= BT_TIME){
-            bt_data = read_bt();
-            if (bt_data != ' '){
-                move_motors(bt_data, 100, 100);
-            }
-        }
+        read_bt(); 
     }
 }
 
 // ----- Functions ------------------------------------------------------------------
-
-char read_bt(){
+void read_bt(){
     char c = ' ';
     if (bt.readable()){
         c = bt.getc();
         bt.printf("%c\n\r", c);
+    //}
+    //if (c != ' '){
+        command_bt(c);
     }
-    return c;
+}
+
+void command_bt(char _command){
+    switch (_command){
+        case MOVE_FWD_F:
+            motor_fwd(FAST, FAST);
+            break;
+        case MOVE_REV_F:
+            motor_rev(FAST, FAST);
+            break;
+        case MOVE_LEF_F:
+            motor_left(FAST, FAST);
+            break;
+        case MOVE_RIG_F:
+            motor_right(FAST, FAST);
+            break;
+        case MOVE_FWD_S:
+            motor_fwd(SLOW, SLOW);
+            break;
+        case MOVE_REV_S:
+            motor_rev(SLOW, SLOW);
+            break;
+        case MOVE_LEF_S:
+            motor_left(SLOW, SLOW);
+            break;
+        case MOVE_RIG_S:
+            motor_right(SLOW, SLOW);
+            break;
+        case MOVE_STO:
+            motor_stop();
+            break;
+        //case MOVE_90L:
+        //    move_90(1);
+        //    break;
+        //case MOVE_90R:
+        //    move_90(2);
+        //    break;
+        case reset_encoders:
+            encoders_to_zero();
+            break;
+        case request_data:
+            send_all_data();
+            break;
+        default:
+            motor_stop();
+        //    bt.printf("%f\r\n", get_mag_angle());
+        break;
+    }
+}
+
+void send_all_data(){
+    bt.printf("sending all data...\n");
+    bt.printf("Right encoder: %f cms\tLeft encoder: %f cms\n", encoder(encoder_rigth), encoder(encoder_rigth));
+    bt.printf("Rigt distance: %fcms\tLeft distance: %fcms\n", ultrasonicos(ULTRA_R), ultrasonicos(ULTRA_L));
+    bt.printf("Angle: %f\n", get_mag_angle());
 }
\ No newline at end of file