Prakikum 1

Dependencies:   mbed SeeedShieldBot BluetoothSerial

Committer:
tiiecher
Date:
Sun Nov 01 17:23:14 2020 +0000
Revision:
0:e96fa074cd27
neu

Who changed what in which revision?

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