Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: ZumoRobotUtilities mbed-rtos mbed
Fork of ZumoRobotBluetoothControlled by
main.cpp@5:8583f3df3514, 2014-12-21 (annotated)
- Committer:
- catalincraciun7
- Date:
- Sun Dec 21 12:47:02 2014 +0000
- Revision:
- 5:8583f3df3514
- Parent:
- 4:9bed0d58673d
- Child:
- 6:916dc537bada
Minor changes
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| catalincraciun7 | 1:bac719753a33 | 1 | // Craciun Catalin |
| catalincraciun7 | 0:827b012f1913 | 2 | // main.h |
| catalincraciun7 | 0:827b012f1913 | 3 | // © 2014 Catalin Craciun |
| catalincraciun7 | 0:827b012f1913 | 4 | |
| catalincraciun7 | 0:827b012f1913 | 5 | #include "mbed.h" |
| catalincraciun7 | 5:8583f3df3514 | 6 | #include "rtos.h" |
| catalincraciun7 | 4:9bed0d58673d | 7 | #include "Buzzer.h" |
| catalincraciun7 | 0:827b012f1913 | 8 | #include "ZumoRobotManager.h" |
| catalincraciun7 | 0:827b012f1913 | 9 | |
| catalincraciun7 | 2:53d1b48743a3 | 10 | using namespace std; |
| catalincraciun7 | 2:53d1b48743a3 | 11 | |
| catalincraciun7 | 0:827b012f1913 | 12 | #define RGBLED_ON 0 |
| catalincraciun7 | 0:827b012f1913 | 13 | #define RGBLED_OFF 1 |
| catalincraciun7 | 0:827b012f1913 | 14 | |
| catalincraciun7 | 0:827b012f1913 | 15 | DigitalOut LEDRED(LED_RED); |
| catalincraciun7 | 0:827b012f1913 | 16 | DigitalOut LEDBLUE(LED_BLUE); |
| catalincraciun7 | 0:827b012f1913 | 17 | DigitalOut LEDGREEN(LED_GREEN); |
| catalincraciun7 | 0:827b012f1913 | 18 | |
| catalincraciun7 | 5:8583f3df3514 | 19 | Buzzer buzzer(PTA12); |
| catalincraciun7 | 4:9bed0d58673d | 20 | ZumoRobotManager zumoRobotManager; |
| catalincraciun7 | 2:53d1b48743a3 | 21 | |
| catalincraciun7 | 2:53d1b48743a3 | 22 | Timer inputTimer; |
| catalincraciun7 | 2:53d1b48743a3 | 23 | Serial bluetooth(PTC4, PTC3); |
| catalincraciun7 | 2:53d1b48743a3 | 24 | |
| catalincraciun7 | 3:83ac04b7ee07 | 25 | /** |
| catalincraciun7 | 4:9bed0d58673d | 26 | * The string received from bluetooth |
| catalincraciun7 | 3:83ac04b7ee07 | 27 | */ |
| catalincraciun7 | 3:83ac04b7ee07 | 28 | char bluetoothInput[20]; |
| catalincraciun7 | 2:53d1b48743a3 | 29 | float velocity; |
| catalincraciun7 | 1:bac719753a33 | 30 | |
| catalincraciun7 | 3:83ac04b7ee07 | 31 | /** |
| catalincraciun7 | 3:83ac04b7ee07 | 32 | * This method waits for the robot's password in order to unlock it |
| catalincraciun7 | 3:83ac04b7ee07 | 33 | */ |
| catalincraciun7 | 3:83ac04b7ee07 | 34 | void waitForPassword(); |
| catalincraciun7 | 3:83ac04b7ee07 | 35 | /** |
| catalincraciun7 | 3:83ac04b7ee07 | 36 | * Method for updating the robot |
| catalincraciun7 | 3:83ac04b7ee07 | 37 | */ |
| catalincraciun7 | 3:83ac04b7ee07 | 38 | void update(); |
| catalincraciun7 | 3:83ac04b7ee07 | 39 | /** |
| catalincraciun7 | 3:83ac04b7ee07 | 40 | * Method for initialising the robot |
| catalincraciun7 | 5:8583f3df3514 | 41 | * It initialises the bluetooth's baud rate, the leds, creates a new instance of ZumoRobotManager and sets the |
| catalincraciun7 | 3:83ac04b7ee07 | 42 | * timer for controlling the bluetooth's transmission flow |
| catalincraciun7 | 3:83ac04b7ee07 | 43 | */ |
| catalincraciun7 | 3:83ac04b7ee07 | 44 | void init(); |
| catalincraciun7 | 3:83ac04b7ee07 | 45 | |
| catalincraciun7 | 5:8583f3df3514 | 46 | void waitForPassword() |
| catalincraciun7 | 5:8583f3df3514 | 47 | { |
| catalincraciun7 | 3:83ac04b7ee07 | 48 | |
| catalincraciun7 | 3:83ac04b7ee07 | 49 | // Turning off the leds |
| catalincraciun7 | 5:8583f3df3514 | 50 | LEDBLUE = RGBLED_OFF; |
| catalincraciun7 | 5:8583f3df3514 | 51 | LEDRED = RGBLED_OFF; |
| catalincraciun7 | 5:8583f3df3514 | 52 | LEDGREEN = RGBLED_OFF; |
| catalincraciun7 | 3:83ac04b7ee07 | 53 | while (true) { |
| catalincraciun7 | 3:83ac04b7ee07 | 54 | // Waiting to read the password of the bluetooth |
| catalincraciun7 | 3:83ac04b7ee07 | 55 | if (bluetooth.readable()) { |
| catalincraciun7 | 3:83ac04b7ee07 | 56 | bluetooth.gets(bluetoothInput, 15); |
| catalincraciun7 | 5:8583f3df3514 | 57 | |
| catalincraciun7 | 4:9bed0d58673d | 58 | if (zumoRobotManager.checkPassword(bluetoothInput)) { |
| catalincraciun7 | 3:83ac04b7ee07 | 59 | // Sending a "successfuly message" back to the device which sent the password |
| catalincraciun7 | 3:83ac04b7ee07 | 60 | bluetooth.printf("$suc"); |
| catalincraciun7 | 3:83ac04b7ee07 | 61 | break; |
| catalincraciun7 | 3:83ac04b7ee07 | 62 | } else { |
| catalincraciun7 | 3:83ac04b7ee07 | 63 | // Sending a "failure message" back to the device which sent the password |
| catalincraciun7 | 5:8583f3df3514 | 64 | bluetooth.printf("$fai"); |
| catalincraciun7 | 3:83ac04b7ee07 | 65 | } |
| catalincraciun7 | 3:83ac04b7ee07 | 66 | } |
| catalincraciun7 | 3:83ac04b7ee07 | 67 | } |
| catalincraciun7 | 5:8583f3df3514 | 68 | |
| catalincraciun7 | 3:83ac04b7ee07 | 69 | update(); |
| catalincraciun7 | 3:83ac04b7ee07 | 70 | } |
| catalincraciun7 | 3:83ac04b7ee07 | 71 | |
| catalincraciun7 | 5:8583f3df3514 | 72 | void update() |
| catalincraciun7 | 5:8583f3df3514 | 73 | { |
| catalincraciun7 | 5:8583f3df3514 | 74 | |
| catalincraciun7 | 2:53d1b48743a3 | 75 | // Updating loop |
| catalincraciun7 | 3:83ac04b7ee07 | 76 | |
| catalincraciun7 | 3:83ac04b7ee07 | 77 | // Setting the timer for controlling the bluetooth flow |
| catalincraciun7 | 5:8583f3df3514 | 78 | inputTimer.start(); |
| catalincraciun7 | 5:8583f3df3514 | 79 | Serial pc(USBTX, USBRX); |
| catalincraciun7 | 3:83ac04b7ee07 | 80 | // Lighting the green led |
| catalincraciun7 | 5:8583f3df3514 | 81 | LEDBLUE = RGBLED_OFF; |
| catalincraciun7 | 5:8583f3df3514 | 82 | LEDRED = RGBLED_OFF; |
| catalincraciun7 | 5:8583f3df3514 | 83 | LEDGREEN = RGBLED_ON; |
| catalincraciun7 | 2:53d1b48743a3 | 84 | while (true) { |
| catalincraciun7 | 2:53d1b48743a3 | 85 | if (inputTimer.read_ms() >= 10 && bluetooth.readable()) { |
| catalincraciun7 | 2:53d1b48743a3 | 86 | inputTimer.reset(); |
| catalincraciun7 | 3:83ac04b7ee07 | 87 | bluetooth.gets(bluetoothInput, 15); |
| catalincraciun7 | 5:8583f3df3514 | 88 | |
| catalincraciun7 | 3:83ac04b7ee07 | 89 | // Checking the type of input received |
| catalincraciun7 | 5:8583f3df3514 | 90 | if ((bluetoothInput[0] == '+' || bluetoothInput[0] == '-') && |
| catalincraciun7 | 5:8583f3df3514 | 91 | (bluetoothInput[1] == '+' || bluetoothInput[1] == '-') && |
| catalincraciun7 | 5:8583f3df3514 | 92 | bluetoothInput[2] >= '0' && bluetoothInput[2] <='9' && |
| catalincraciun7 | 5:8583f3df3514 | 93 | bluetoothInput[3] >= '0' && bluetoothInput[3] <='9' && |
| catalincraciun7 | 5:8583f3df3514 | 94 | bluetoothInput[4] >= '0' && bluetoothInput[4] <='9' && |
| catalincraciun7 | 5:8583f3df3514 | 95 | bluetoothInput[5] >= '0' && bluetoothInput[5] <='9') { |
| catalincraciun7 | 5:8583f3df3514 | 96 | /// Got a "velocity descriptor" string |
| catalincraciun7 | 5:8583f3df3514 | 97 | velocity = ((bluetoothInput[2] - '0') * 10.0f + (bluetoothInput[3] - '0') * 1.0f) * 0.01f; |
| catalincraciun7 | 5:8583f3df3514 | 98 | if (bluetoothInput[0] == '-') |
| catalincraciun7 | 5:8583f3df3514 | 99 | velocity = -velocity; |
| catalincraciun7 | 5:8583f3df3514 | 100 | zumoRobotManager.setVelocityX(velocity); |
| catalincraciun7 | 5:8583f3df3514 | 101 | |
| catalincraciun7 | 5:8583f3df3514 | 102 | velocity = ((bluetoothInput[4] - '0') * 10.0f + (bluetoothInput[5] - '0') * 1.0f) * 0.01f; |
| catalincraciun7 | 5:8583f3df3514 | 103 | if (bluetoothInput[1] == '-') |
| catalincraciun7 | 5:8583f3df3514 | 104 | velocity = -velocity; |
| catalincraciun7 | 5:8583f3df3514 | 105 | zumoRobotManager.setVelocityY(velocity); |
| catalincraciun7 | 3:83ac04b7ee07 | 106 | } else if (bluetoothInput[0] == 'c' && |
| catalincraciun7 | 3:83ac04b7ee07 | 107 | bluetoothInput[1] == '$') { |
| catalincraciun7 | 3:83ac04b7ee07 | 108 | // Got a "colour macro command" (macro command referring to the color of the RGB led on robot) |
| catalincraciun7 | 3:83ac04b7ee07 | 109 | char colour = bluetoothInput[2]; |
| catalincraciun7 | 5:8583f3df3514 | 110 | if (colour == 'r') { |
| catalincraciun7 | 5:8583f3df3514 | 111 | LEDRED = RGBLED_ON; |
| catalincraciun7 | 5:8583f3df3514 | 112 | LEDBLUE = RGBLED_OFF; |
| catalincraciun7 | 5:8583f3df3514 | 113 | LEDGREEN = RGBLED_OFF; |
| catalincraciun7 | 5:8583f3df3514 | 114 | buzzer.startBeep(1000, 0.25); |
| catalincraciun7 | 2:53d1b48743a3 | 115 | } else if (colour == 'g') { |
| catalincraciun7 | 5:8583f3df3514 | 116 | LEDRED = RGBLED_OFF; |
| catalincraciun7 | 5:8583f3df3514 | 117 | LEDBLUE = RGBLED_OFF; |
| catalincraciun7 | 5:8583f3df3514 | 118 | LEDGREEN = RGBLED_ON; |
| catalincraciun7 | 4:9bed0d58673d | 119 | buzzer.startBeep(1000, 0.25); |
| catalincraciun7 | 2:53d1b48743a3 | 120 | } else if (colour == 'b') { |
| catalincraciun7 | 5:8583f3df3514 | 121 | LEDRED = RGBLED_OFF; |
| catalincraciun7 | 5:8583f3df3514 | 122 | LEDBLUE = RGBLED_ON; |
| catalincraciun7 | 5:8583f3df3514 | 123 | LEDGREEN = RGBLED_OFF; |
| catalincraciun7 | 4:9bed0d58673d | 124 | buzzer.startBeep(1000, 0.25); |
| catalincraciun7 | 5:8583f3df3514 | 125 | } |
| catalincraciun7 | 3:83ac04b7ee07 | 126 | } else if (bluetoothInput[0] == '$') { |
| catalincraciun7 | 3:83ac04b7ee07 | 127 | // Received a "macro command" (macro command = a command controlling the status of the device or so) |
| catalincraciun7 | 3:83ac04b7ee07 | 128 | if (bluetoothInput[1] == 'o' && |
| catalincraciun7 | 5:8583f3df3514 | 129 | bluetoothInput[2] == 'u' && |
| catalincraciun7 | 5:8583f3df3514 | 130 | bluetoothInput[3] == 't') { |
| catalincraciun7 | 3:83ac04b7ee07 | 131 | // Connection should be ended |
| catalincraciun7 | 5:8583f3df3514 | 132 | break; |
| catalincraciun7 | 3:83ac04b7ee07 | 133 | } |
| catalincraciun7 | 2:53d1b48743a3 | 134 | } |
| catalincraciun7 | 2:53d1b48743a3 | 135 | } |
| catalincraciun7 | 2:53d1b48743a3 | 136 | } |
| catalincraciun7 | 5:8583f3df3514 | 137 | |
| catalincraciun7 | 3:83ac04b7ee07 | 138 | // Connection was terminated, retrieving the "locked" status |
| catalincraciun7 | 3:83ac04b7ee07 | 139 | waitForPassword(); |
| catalincraciun7 | 2:53d1b48743a3 | 140 | } |
| catalincraciun7 | 2:53d1b48743a3 | 141 | |
| catalincraciun7 | 5:8583f3df3514 | 142 | void init() |
| catalincraciun7 | 5:8583f3df3514 | 143 | { |
| catalincraciun7 | 2:53d1b48743a3 | 144 | |
| catalincraciun7 | 3:83ac04b7ee07 | 145 | // Initialising the robot |
| catalincraciun7 | 5:8583f3df3514 | 146 | |
| catalincraciun7 | 3:83ac04b7ee07 | 147 | // Turning off the leds |
| catalincraciun7 | 5:8583f3df3514 | 148 | LEDBLUE = RGBLED_OFF; |
| catalincraciun7 | 5:8583f3df3514 | 149 | LEDRED = RGBLED_OFF; |
| catalincraciun7 | 5:8583f3df3514 | 150 | LEDGREEN = RGBLED_OFF; |
| catalincraciun7 | 2:53d1b48743a3 | 151 | |
| catalincraciun7 | 3:83ac04b7ee07 | 152 | // Setting the bluetoot's baud rate for communication |
| catalincraciun7 | 2:53d1b48743a3 | 153 | bluetooth.baud(9600); |
| catalincraciun7 | 0:827b012f1913 | 154 | } |
| catalincraciun7 | 0:827b012f1913 | 155 | |
| catalincraciun7 | 5:8583f3df3514 | 156 | int main() |
| catalincraciun7 | 5:8583f3df3514 | 157 | { |
| catalincraciun7 | 5:8583f3df3514 | 158 | |
| catalincraciun7 | 3:83ac04b7ee07 | 159 | // Calling init |
| catalincraciun7 | 3:83ac04b7ee07 | 160 | init(); |
| catalincraciun7 | 3:83ac04b7ee07 | 161 | // Locking the robot |
| catalincraciun7 | 3:83ac04b7ee07 | 162 | waitForPassword(); |
| catalincraciun7 | 0:827b012f1913 | 163 | |
| catalincraciun7 | 3:83ac04b7ee07 | 164 | return 0; |
| catalincraciun7 | 0:827b012f1913 | 165 | } |
