program

Dependencies:   mbed SeeedShieldBot BluetoothSerial

Committer:
lorenzo_cerullo
Date:
Wed Nov 24 09:33:47 2021 +0000
Revision:
0:e06ea551926b
program

Who changed what in which revision?

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