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