Constantin Eugen Costescu / Fsl_Zumo

Dependencies:   ZumoRobotUtilities mbed-rtos mbed

Fork of ZumoRobotBluetoothControlled by Catalin Craciun

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?

UserRevisionLine numberNew 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 }