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
main.cpp@0:3a322aad8c88, 2014-10-16 (annotated)
- Committer:
- gerardo_carmona
- Date:
- Thu Oct 16 01:59:21 2014 +0000
- Revision:
- 0:3a322aad8c88
- Child:
- 1:ab09b233da7b
First release.
Who changed what in which revision?
User | Revision | Line number | New 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 | 0:3a322aad8c88 | 10 | * Magnometer (FXOS8700CQ & magnometer.h) |
gerardo_carmona | 0:3a322aad8c88 | 11 | * Motors (motors.h) |
gerardo_carmona | 0:3a322aad8c88 | 12 | * Encoder |
gerardo_carmona | 0:3a322aad8c88 | 13 | * Ultrasonics |
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 | 0:3a322aad8c88 | 29 | 1.0 - 10/14/14 |
gerardo_carmona | 0:3a322aad8c88 | 30 | |
gerardo_carmona | 0:3a322aad8c88 | 31 | HISTORY: |
gerardo_carmona | 0:3a322aad8c88 | 32 | 1.0 - 10/14/14 |
gerardo_carmona | 0:3a322aad8c88 | 33 | (+) Initial release. |
gerardo_carmona | 0:3a322aad8c88 | 34 | |
gerardo_carmona | 0:3a322aad8c88 | 35 | |
gerardo_carmona | 0:3a322aad8c88 | 36 | ================================================================================== */ |
gerardo_carmona | 0:3a322aad8c88 | 37 | |
gerardo_carmona | 0:3a322aad8c88 | 38 | // ----- Libraries ------------------------------------------------------------------ |
gerardo_carmona | 0:3a322aad8c88 | 39 | #include "mbed.h" |
gerardo_carmona | 0:3a322aad8c88 | 40 | #include "motors.h" |
gerardo_carmona | 0:3a322aad8c88 | 41 | #include "magnometer.h" |
gerardo_carmona | 0:3a322aad8c88 | 42 | |
gerardo_carmona | 0:3a322aad8c88 | 43 | // ----- Constants ------------------------------------------------------------------ |
gerardo_carmona | 0:3a322aad8c88 | 44 | #define LED_ERROR 6 |
gerardo_carmona | 0:3a322aad8c88 | 45 | #define LED_NORMAL 5 |
gerardo_carmona | 0:3a322aad8c88 | 46 | #define LED_BUSY 3 |
gerardo_carmona | 0:3a322aad8c88 | 47 | #define BT_TIME 100 |
gerardo_carmona | 0:3a322aad8c88 | 48 | |
gerardo_carmona | 0:3a322aad8c88 | 49 | // ----- I/O Pins ------------------------------------------------------------------- |
gerardo_carmona | 0:3a322aad8c88 | 50 | Serial pc(USBTX, USBRX); |
gerardo_carmona | 0:3a322aad8c88 | 51 | Serial bt(PTC15, PTC14); |
gerardo_carmona | 0:3a322aad8c88 | 52 | //FXOS8700CQ fxos(PTE25, PTE24, FXOS8700CQ_SLAVE_ADDR1); // SDA, SCL, (addr << 1) |
gerardo_carmona | 0:3a322aad8c88 | 53 | // Leds for status |
gerardo_carmona | 0:3a322aad8c88 | 54 | BusOut leds(LED_RED, LED_GREEN, LED_BLUE); |
gerardo_carmona | 0:3a322aad8c88 | 55 | |
gerardo_carmona | 0:3a322aad8c88 | 56 | // Sensors |
gerardo_carmona | 0:3a322aad8c88 | 57 | //AnalogIn current_left(A0); |
gerardo_carmona | 0:3a322aad8c88 | 58 | //AnalogIn current_left(A1); |
gerardo_carmona | 0:3a322aad8c88 | 59 | AnalogIn ultra_left(A2); |
gerardo_carmona | 0:3a322aad8c88 | 60 | AnalogIn ultra_right(A3); |
gerardo_carmona | 0:3a322aad8c88 | 61 | DigitalIn encoder_left(D3); |
gerardo_carmona | 0:3a322aad8c88 | 62 | DigitalIn encoder_right(D4); |
gerardo_carmona | 0:3a322aad8c88 | 63 | |
gerardo_carmona | 0:3a322aad8c88 | 64 | // ----- Others --------------------------------------------------------------------- |
gerardo_carmona | 0:3a322aad8c88 | 65 | //SRAWDATA accel_data; |
gerardo_carmona | 0:3a322aad8c88 | 66 | //SRAWDATA magn_data; |
gerardo_carmona | 0:3a322aad8c88 | 67 | Timer bt_timer; |
gerardo_carmona | 0:3a322aad8c88 | 68 | Timer gps_timer; |
gerardo_carmona | 0:3a322aad8c88 | 69 | |
gerardo_carmona | 0:3a322aad8c88 | 70 | // ----- Variables ------------------------------------------------------------------ |
gerardo_carmona | 0:3a322aad8c88 | 71 | double mag_x, mag_y; |
gerardo_carmona | 0:3a322aad8c88 | 72 | double average; |
gerardo_carmona | 0:3a322aad8c88 | 73 | char bt_data; |
gerardo_carmona | 0:3a322aad8c88 | 74 | |
gerardo_carmona | 0:3a322aad8c88 | 75 | // ----- Function prototypes -------------------------------------------------------- |
gerardo_carmona | 0:3a322aad8c88 | 76 | //double get_mag_x(); |
gerardo_carmona | 0:3a322aad8c88 | 77 | //double get_mag_y(); |
gerardo_carmona | 0:3a322aad8c88 | 78 | //double get_mag_angle(); // Read angle from the compass |
gerardo_carmona | 0:3a322aad8c88 | 79 | char read_bt(); |
gerardo_carmona | 0:3a322aad8c88 | 80 | |
gerardo_carmona | 0:3a322aad8c88 | 81 | // ----- Main program --------------------------------------------------------------- |
gerardo_carmona | 0:3a322aad8c88 | 82 | int main(){ |
gerardo_carmona | 0:3a322aad8c88 | 83 | bt.baud(9600); |
gerardo_carmona | 0:3a322aad8c88 | 84 | pc.baud(9600); |
gerardo_carmona | 0:3a322aad8c88 | 85 | //fxos.enable(); |
gerardo_carmona | 0:3a322aad8c88 | 86 | leds = LED_NORMAL; |
gerardo_carmona | 0:3a322aad8c88 | 87 | bt_timer.start(); |
gerardo_carmona | 0:3a322aad8c88 | 88 | |
gerardo_carmona | 0:3a322aad8c88 | 89 | while (true){ |
gerardo_carmona | 0:3a322aad8c88 | 90 | if (bt_timer.read_ms() >= BT_TIME){ |
gerardo_carmona | 0:3a322aad8c88 | 91 | bt_data = read_bt(); |
gerardo_carmona | 0:3a322aad8c88 | 92 | if (bt_data != ' '){ |
gerardo_carmona | 0:3a322aad8c88 | 93 | move_motors(bt_data, 100, 100); |
gerardo_carmona | 0:3a322aad8c88 | 94 | } |
gerardo_carmona | 0:3a322aad8c88 | 95 | } |
gerardo_carmona | 0:3a322aad8c88 | 96 | } |
gerardo_carmona | 0:3a322aad8c88 | 97 | } |
gerardo_carmona | 0:3a322aad8c88 | 98 | |
gerardo_carmona | 0:3a322aad8c88 | 99 | // ----- Functions ------------------------------------------------------------------ |
gerardo_carmona | 0:3a322aad8c88 | 100 | |
gerardo_carmona | 0:3a322aad8c88 | 101 | char read_bt(){ |
gerardo_carmona | 0:3a322aad8c88 | 102 | char c = ' '; |
gerardo_carmona | 0:3a322aad8c88 | 103 | if (bt.readable()){ |
gerardo_carmona | 0:3a322aad8c88 | 104 | c = bt.getc(); |
gerardo_carmona | 0:3a322aad8c88 | 105 | bt.printf("%c\n\r", c); |
gerardo_carmona | 0:3a322aad8c88 | 106 | } |
gerardo_carmona | 0:3a322aad8c88 | 107 | return c; |
gerardo_carmona | 0:3a322aad8c88 | 108 | } |