FRDM KL25Z bluetooth controller

Dependencies:   ZumoRobotUtilities mbed-rtos mbed

Fork of ZumoRobotBluetoothControlled by Catalin Craciun

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?

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