Nucleo board with Seeed bot and bluetooth shields demo.

Dependencies:   BluetoothSerial SeeedShieldBot mbed

This code shows a simple application composed of a Nucleo board, a Seeed Bot and Seeed Bluetooth shieds:

This picture shows how the three boards are stacked together:

/media/uploads/bcostm/nucleo_bluetooth_bot.jpg

You will need also to use an application on your phone to send Bluetooth commands and to be able to control the Bot shield. We have used the Bluetooth spp tools pro Android application.

Look at this video to have more details about this demo:

Committer:
bcostm
Date:
Thu Oct 16 06:18:14 2014 +0000
Revision:
3:68fe5b9e069a
Parent:
2:7b09d04f029b
Child:
4:5dd60bfc3cdd
Stop the motors when a front sensor has detected something.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bcostm 0:fa6bc104fe2d 1 #include "mbed.h"
bcostm 0:fa6bc104fe2d 2 #include "BluetoothSerial.h"
bcostm 0:fa6bc104fe2d 3 #include "SeeedStudioShieldBot.h"
bcostm 0:fa6bc104fe2d 4
bcostm 0:fa6bc104fe2d 5 // The following configuration must be done on the NUCLEO board:
bcostm 0:fa6bc104fe2d 6 // - Close SB62/SB63 and open SB13/SB14 solder bridges to enable the D0/D1 pins
bcostm 0:fa6bc104fe2d 7 // - Open SB21 solder bridge to disconnect the LED
bcostm 0:fa6bc104fe2d 8
bcostm 0:fa6bc104fe2d 9 BluetoothSerial bluetooth(D1, D0); // TX, RX
bcostm 0:fa6bc104fe2d 10
bcostm 0:fa6bc104fe2d 11 SeeedStudioShieldBot bot(
bcostm 0:fa6bc104fe2d 12 D8, D9, D11, // Right motor pins (PwmOut, DigitalOut, DigitalOut) -> Motor 1
bcostm 0:fa6bc104fe2d 13 D12, D10, D13, // Left motor pins (PwmOut, DigitalOut, DigitalOut) -> Motor 2
bcostm 3:68fe5b9e069a 14 A0, A1, A2, A3, A4 // Sensors pins (all DigitalIn)
bcostm 0:fa6bc104fe2d 15 );
bcostm 0:fa6bc104fe2d 16
bcostm 0:fa6bc104fe2d 17 // Enable it for debugging on hyperterminal
bcostm 0:fa6bc104fe2d 18 #define DEBUG 1
bcostm 0:fa6bc104fe2d 19 #if DEBUG == 1
bcostm 0:fa6bc104fe2d 20 Serial pc(PC_10, PC_11);
bcostm 0:fa6bc104fe2d 21 #define PC_DEBUG(args...) pc.printf(args)
bcostm 0:fa6bc104fe2d 22 #else
bcostm 0:fa6bc104fe2d 23 #define PC_DEBUG(args...)
bcostm 0:fa6bc104fe2d 24 #endif
bcostm 0:fa6bc104fe2d 25
bcostm 0:fa6bc104fe2d 26 Ticker tick;
bcostm 0:fa6bc104fe2d 27
bcostm 3:68fe5b9e069a 28 float speed = 1.0; // Used to select the motors speed
bcostm 3:68fe5b9e069a 29 int stop = 0; // Used to stop the motors when a sensor detects something
bcostm 3:68fe5b9e069a 30
bcostm 0:fa6bc104fe2d 31 void ReadCommand(void)
bcostm 0:fa6bc104fe2d 32 {
bcostm 0:fa6bc104fe2d 33 int cmd = 0;
bcostm 0:fa6bc104fe2d 34 PC_DEBUG(">>> Read command...\n");
bcostm 3:68fe5b9e069a 35
bcostm 0:fa6bc104fe2d 36 if (bluetooth.readable())
bcostm 0:fa6bc104fe2d 37 {
bcostm 0:fa6bc104fe2d 38 cmd = bluetooth.getc();
bcostm 0:fa6bc104fe2d 39 PC_DEBUG(">>> Bluetooth read [%c]\n", cmd);
bcostm 3:68fe5b9e069a 40
bcostm 3:68fe5b9e069a 41 // Ignore the receive command (excepted "Backward") if a sensor has detected something.
bcostm 3:68fe5b9e069a 42 if ((stop) && (cmd != '2')) return;
bcostm 3:68fe5b9e069a 43
bcostm 3:68fe5b9e069a 44 switch (cmd)
bcostm 0:fa6bc104fe2d 45 {
bcostm 3:68fe5b9e069a 46 case '1': // Forward
bcostm 3:68fe5b9e069a 47 bot.forward(speed);
bcostm 3:68fe5b9e069a 48 break;
bcostm 3:68fe5b9e069a 49 case '2': // Backward
bcostm 3:68fe5b9e069a 50 bot.backward(speed);
bcostm 3:68fe5b9e069a 51 break;
bcostm 3:68fe5b9e069a 52 case '3': // Left
bcostm 3:68fe5b9e069a 53 bot.left(speed);
bcostm 3:68fe5b9e069a 54 break;
bcostm 3:68fe5b9e069a 55 case '4': // Right
bcostm 3:68fe5b9e069a 56 bot.right(speed);
bcostm 3:68fe5b9e069a 57 break;
bcostm 3:68fe5b9e069a 58 case '5': // Turn left
bcostm 3:68fe5b9e069a 59 bot.turn_right(speed);
bcostm 3:68fe5b9e069a 60 break;
bcostm 3:68fe5b9e069a 61 case '6': // Turn right
bcostm 3:68fe5b9e069a 62 bot.turn_left(speed);
bcostm 3:68fe5b9e069a 63 break;
bcostm 3:68fe5b9e069a 64 case '7': // Slow
bcostm 3:68fe5b9e069a 65 speed = 0.4;
bcostm 3:68fe5b9e069a 66 break;
bcostm 3:68fe5b9e069a 67 case '8': // Fast
bcostm 3:68fe5b9e069a 68 speed = 1.0;
bcostm 3:68fe5b9e069a 69 break;
bcostm 3:68fe5b9e069a 70 default: // Stop
bcostm 3:68fe5b9e069a 71 bot.stopAll();
bcostm 3:68fe5b9e069a 72 break;
bcostm 0:fa6bc104fe2d 73 }
bcostm 0:fa6bc104fe2d 74 }
bcostm 0:fa6bc104fe2d 75 }
bcostm 0:fa6bc104fe2d 76
bcostm 0:fa6bc104fe2d 77 int main()
bcostm 0:fa6bc104fe2d 78 {
bcostm 0:fa6bc104fe2d 79 PC_DEBUG("\n\nSeeed Bluetooth shield test started.\n");
bcostm 0:fa6bc104fe2d 80
bcostm 0:fa6bc104fe2d 81 // Enable motors
bcostm 0:fa6bc104fe2d 82 bot.enable_right_motor();
bcostm 0:fa6bc104fe2d 83 bot.enable_left_motor();
bcostm 0:fa6bc104fe2d 84
bcostm 0:fa6bc104fe2d 85 PC_DEBUG(">>> Bluetooth setup...");
bcostm 0:fa6bc104fe2d 86 bluetooth.setup();
bcostm 0:fa6bc104fe2d 87 PC_DEBUG("done\n");
bcostm 0:fa6bc104fe2d 88
bcostm 0:fa6bc104fe2d 89 PC_DEBUG(">>> Bluetooth in slave mode...");
bcostm 0:fa6bc104fe2d 90 bluetooth.slave("btslave8seeed"); // default PIN code: 0000
bcostm 0:fa6bc104fe2d 91 PC_DEBUG("done\n");
bcostm 0:fa6bc104fe2d 92
bcostm 0:fa6bc104fe2d 93 wait(2);
bcostm 0:fa6bc104fe2d 94
bcostm 0:fa6bc104fe2d 95 PC_DEBUG(">>> Bluetooth connect...");
bcostm 0:fa6bc104fe2d 96 bluetooth.connect();
bcostm 0:fa6bc104fe2d 97 PC_DEBUG("done\n");
bcostm 0:fa6bc104fe2d 98
bcostm 3:68fe5b9e069a 99 tick.attach(ReadCommand, 0.3); // Every 300 ms read Bluetooth command
bcostm 3:68fe5b9e069a 100
bcostm 3:68fe5b9e069a 101 // Check if motors are alive
bcostm 3:68fe5b9e069a 102 bot.left(speed);
bcostm 3:68fe5b9e069a 103 wait(0.2);
bcostm 3:68fe5b9e069a 104 bot.right(speed);
bcostm 3:68fe5b9e069a 105 wait(0.2);
bcostm 3:68fe5b9e069a 106 bot.stopAll();
bcostm 0:fa6bc104fe2d 107
bcostm 0:fa6bc104fe2d 108 while (1) {
bcostm 3:68fe5b9e069a 109 // Stop the motors if a sensor has detected something.
bcostm 3:68fe5b9e069a 110 if (!bot.rightSensor || !bot.inRightSensor || !bot.centreSensor || !bot.inLeftSensor || !bot.leftSensor)
bcostm 3:68fe5b9e069a 111 {
bcostm 3:68fe5b9e069a 112 if (!stop) bot.stopAll();
bcostm 3:68fe5b9e069a 113 stop = 1;
bcostm 3:68fe5b9e069a 114 }
bcostm 3:68fe5b9e069a 115 else
bcostm 3:68fe5b9e069a 116 {
bcostm 3:68fe5b9e069a 117 stop = 0;
bcostm 3:68fe5b9e069a 118 }
bcostm 3:68fe5b9e069a 119 }
bcostm 0:fa6bc104fe2d 120 }