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
Committer:
gerardo_carmona
Date:
Thu Oct 16 17:30:52 2014 +0000
Revision:
2:94059cb643be
Parent:
1:ab09b233da7b
Child:
3:bd16e43ad7be
v1.2

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gerardo_carmona 0:3a322aad8c88 1 /* ==================================================================================
gerardo_carmona 0:3a322aad8c88 2 --- TEST 1 ---
gerardo_carmona 0:3a322aad8c88 3 OBJETIVE:
gerardo_carmona 0:3a322aad8c88 4 Move the motor via bluetooth and program 90° turns to the right and left using
gerardo_carmona 0:3a322aad8c88 5 the magnometer. It will report data from the encoders and limit the movement by
gerardo_carmona 0:3a322aad8c88 6 the ultrasonic sensors
gerardo_carmona 0:3a322aad8c88 7
gerardo_carmona 0:3a322aad8c88 8 COMPONENTS:
gerardo_carmona 0:3a322aad8c88 9 * Bluetooth
gerardo_carmona 2:94059cb643be 10 * Magnometer (FXOS8700CQ & magnometer.h)
gerardo_carmona 2:94059cb643be 11 * Motors (motors.h)
gerardo_carmona 2:94059cb643be 12 * Encoder
gerardo_carmona 2:94059cb643be 13 * Ultrasonic sensors (motors.h)
gerardo_carmona 0:3a322aad8c88 14
gerardo_carmona 0:3a322aad8c88 15 CONTROLS:
gerardo_carmona 0:3a322aad8c88 16 w: foward
gerardo_carmona 0:3a322aad8c88 17 s: reverse
gerardo_carmona 0:3a322aad8c88 18 a: left turn
gerardo_carmona 0:3a322aad8c88 19 d: right turn
gerardo_carmona 0:3a322aad8c88 20 o: 90° left turn
gerardo_carmona 0:3a322aad8c88 21 p: 90° right turn
gerardo_carmona 0:3a322aad8c88 22
gerardo_carmona 0:3a322aad8c88 23 Credits:
gerardo_carmona 0:3a322aad8c88 24 * Mayumi Haro
gerardo_carmona 0:3a322aad8c88 25 * Sarahí Morán
gerardo_carmona 0:3a322aad8c88 26 * Gerardo Carmona
gerardo_carmona 0:3a322aad8c88 27
gerardo_carmona 0:3a322aad8c88 28 VERSION:
gerardo_carmona 2:94059cb643be 29 1.2 - 10/16/14
gerardo_carmona 2:94059cb643be 30
gerardo_carmona 0:3a322aad8c88 31
gerardo_carmona 0:3a322aad8c88 32 HISTORY:
gerardo_carmona 2:94059cb643be 33 1.2 - 10/16/14
gerardo_carmona 2:94059cb643be 34 (+) Added xbee, ultrasonic, sd_card
gerardo_carmona 2:94059cb643be 35
gerardo_carmona 1:ab09b233da7b 36 1.1 - 10/16/14
gerardo_carmona 1:ab09b233da7b 37 (*) Some bug fixes
gerardo_carmona 2:94059cb643be 38 (+) Added encoder.h and encpoder.cpp (empty files)
gerardo_carmona 1:ab09b233da7b 39
gerardo_carmona 0:3a322aad8c88 40 1.0 - 10/14/14
gerardo_carmona 0:3a322aad8c88 41 (+) Initial release.
gerardo_carmona 0:3a322aad8c88 42
gerardo_carmona 0:3a322aad8c88 43
gerardo_carmona 0:3a322aad8c88 44 ================================================================================== */
gerardo_carmona 0:3a322aad8c88 45
gerardo_carmona 0:3a322aad8c88 46 // ----- Libraries ------------------------------------------------------------------
gerardo_carmona 0:3a322aad8c88 47 #include "mbed.h"
gerardo_carmona 0:3a322aad8c88 48 #include "motors.h"
gerardo_carmona 0:3a322aad8c88 49 #include "magnometer.h"
gerardo_carmona 2:94059cb643be 50 #include "encoder.h"
gerardo_carmona 2:94059cb643be 51 #include "sd_card.h"
gerardo_carmona 2:94059cb643be 52 #include "xbee.h"
gerardo_carmona 0:3a322aad8c88 53
gerardo_carmona 0:3a322aad8c88 54 // ----- Constants ------------------------------------------------------------------
gerardo_carmona 0:3a322aad8c88 55 #define LED_ERROR 6
gerardo_carmona 0:3a322aad8c88 56 #define LED_NORMAL 5
gerardo_carmona 0:3a322aad8c88 57 #define LED_BUSY 3
gerardo_carmona 0:3a322aad8c88 58 #define BT_TIME 100
gerardo_carmona 0:3a322aad8c88 59
gerardo_carmona 0:3a322aad8c88 60 // ----- I/O Pins -------------------------------------------------------------------
gerardo_carmona 0:3a322aad8c88 61 Serial pc(USBTX, USBRX);
gerardo_carmona 0:3a322aad8c88 62 Serial bt(PTC15, PTC14);
gerardo_carmona 0:3a322aad8c88 63 //FXOS8700CQ fxos(PTE25, PTE24, FXOS8700CQ_SLAVE_ADDR1); // SDA, SCL, (addr << 1)
gerardo_carmona 0:3a322aad8c88 64 // Leds for status
gerardo_carmona 0:3a322aad8c88 65 BusOut leds(LED_RED, LED_GREEN, LED_BLUE);
gerardo_carmona 0:3a322aad8c88 66
gerardo_carmona 0:3a322aad8c88 67 // Sensors
gerardo_carmona 0:3a322aad8c88 68 //AnalogIn current_left(A0);
gerardo_carmona 0:3a322aad8c88 69 //AnalogIn current_left(A1);
gerardo_carmona 0:3a322aad8c88 70 AnalogIn ultra_left(A2);
gerardo_carmona 0:3a322aad8c88 71 AnalogIn ultra_right(A3);
gerardo_carmona 0:3a322aad8c88 72 DigitalIn encoder_left(D3);
gerardo_carmona 0:3a322aad8c88 73 DigitalIn encoder_right(D4);
gerardo_carmona 0:3a322aad8c88 74
gerardo_carmona 0:3a322aad8c88 75 // ----- Others ---------------------------------------------------------------------
gerardo_carmona 0:3a322aad8c88 76 //SRAWDATA accel_data;
gerardo_carmona 0:3a322aad8c88 77 //SRAWDATA magn_data;
gerardo_carmona 0:3a322aad8c88 78 Timer bt_timer;
gerardo_carmona 0:3a322aad8c88 79 Timer gps_timer;
gerardo_carmona 0:3a322aad8c88 80
gerardo_carmona 0:3a322aad8c88 81 // ----- Variables ------------------------------------------------------------------
gerardo_carmona 0:3a322aad8c88 82 char bt_data;
gerardo_carmona 0:3a322aad8c88 83
gerardo_carmona 0:3a322aad8c88 84 // ----- Function prototypes --------------------------------------------------------
gerardo_carmona 0:3a322aad8c88 85 //double get_mag_x();
gerardo_carmona 0:3a322aad8c88 86 //double get_mag_y();
gerardo_carmona 0:3a322aad8c88 87 //double get_mag_angle(); // Read angle from the compass
gerardo_carmona 0:3a322aad8c88 88 char read_bt();
gerardo_carmona 0:3a322aad8c88 89
gerardo_carmona 0:3a322aad8c88 90 // ----- Main program ---------------------------------------------------------------
gerardo_carmona 0:3a322aad8c88 91 int main(){
gerardo_carmona 0:3a322aad8c88 92 bt.baud(9600);
gerardo_carmona 0:3a322aad8c88 93 pc.baud(9600);
gerardo_carmona 0:3a322aad8c88 94 //fxos.enable();
gerardo_carmona 0:3a322aad8c88 95 leds = LED_NORMAL;
gerardo_carmona 0:3a322aad8c88 96 bt_timer.start();
gerardo_carmona 0:3a322aad8c88 97 while (true){
gerardo_carmona 0:3a322aad8c88 98 if (bt_timer.read_ms() >= BT_TIME){
gerardo_carmona 0:3a322aad8c88 99 bt_data = read_bt();
gerardo_carmona 0:3a322aad8c88 100 if (bt_data != ' '){
gerardo_carmona 0:3a322aad8c88 101 move_motors(bt_data, 100, 100);
gerardo_carmona 0:3a322aad8c88 102 }
gerardo_carmona 0:3a322aad8c88 103 }
gerardo_carmona 0:3a322aad8c88 104 }
gerardo_carmona 0:3a322aad8c88 105 }
gerardo_carmona 0:3a322aad8c88 106
gerardo_carmona 0:3a322aad8c88 107 // ----- Functions ------------------------------------------------------------------
gerardo_carmona 0:3a322aad8c88 108
gerardo_carmona 0:3a322aad8c88 109 char read_bt(){
gerardo_carmona 0:3a322aad8c88 110 char c = ' ';
gerardo_carmona 0:3a322aad8c88 111 if (bt.readable()){
gerardo_carmona 0:3a322aad8c88 112 c = bt.getc();
gerardo_carmona 0:3a322aad8c88 113 bt.printf("%c\n\r", c);
gerardo_carmona 0:3a322aad8c88 114 }
gerardo_carmona 0:3a322aad8c88 115 return c;
gerardo_carmona 0:3a322aad8c88 116 }