receiver code which helps the vehicle to move forward, backward, left and right

Dependencies:   mbed Servo mbed-rtos XBeeTest Motor emic2 X_NUCLEO_53L0A1

Committer:
CharlesXu
Date:
Fri Dec 14 16:22:54 2018 +0000
Revision:
4:c15361d55018
Parent:
3:5d43739ec09f
Final Version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
CharlesXu 1:95f5ac2f045d 1 #include "Motor.h"
vcazan 0:25aca1983704 2 #include "mbed.h"
CharlesXu 1:95f5ac2f045d 3 #include "emic2.h"
CharlesXu 1:95f5ac2f045d 4 #include "XNucleo53L0A1.h"
CharlesXu 1:95f5ac2f045d 5 #include <stdio.h>
CharlesXu 3:5d43739ec09f 6 #include "rtos.h"
CharlesXu 3:5d43739ec09f 7
CharlesXu 3:5d43739ec09f 8
CharlesXu 1:95f5ac2f045d 9 Serial pc(USBTX, USBRX);
CharlesXu 1:95f5ac2f045d 10 DigitalOut shdn(p26);
CharlesXu 3:5d43739ec09f 11 AnalogOut led(p18);
CharlesXu 1:95f5ac2f045d 12 //I2C sensor pins
CharlesXu 1:95f5ac2f045d 13 #define VL53L0_I2C_SDA p28
CharlesXu 1:95f5ac2f045d 14 #define VL53L0_I2C_SCL p27
vcazan 0:25aca1983704 15
CharlesXu 3:5d43739ec09f 16
CharlesXu 1:95f5ac2f045d 17 static XNucleo53L0A1 *board=NULL;
CharlesXu 1:95f5ac2f045d 18 emic2 myTTS(p13, p14);
CharlesXu 1:95f5ac2f045d 19 Serial xbee1(p9, p10);
CharlesXu 1:95f5ac2f045d 20 DigitalOut rst1(p11);
vcazan 0:25aca1983704 21
CharlesXu 1:95f5ac2f045d 22 Motor B(p23, p6, p5); // pwm, fwd, rev, can brake, right
CharlesXu 1:95f5ac2f045d 23 Motor A(p24, p7, p8); // left motor
CharlesXu 1:95f5ac2f045d 24
CharlesXu 1:95f5ac2f045d 25 char input;
CharlesXu 1:95f5ac2f045d 26 int counter;
CharlesXu 3:5d43739ec09f 27 int direction;
vcazan 0:25aca1983704 28 int main() {
CharlesXu 1:95f5ac2f045d 29 //initialize distance sensor
CharlesXu 1:95f5ac2f045d 30 int status;
CharlesXu 1:95f5ac2f045d 31 uint32_t distance;
CharlesXu 1:95f5ac2f045d 32 DevI2C *device_i2c = new DevI2C(VL53L0_I2C_SDA, VL53L0_I2C_SCL);
CharlesXu 1:95f5ac2f045d 33 /* creates the 53L0A1 expansion board singleton obj */
CharlesXu 1:95f5ac2f045d 34 board = XNucleo53L0A1::instance(device_i2c, A2, D8, D2);
CharlesXu 1:95f5ac2f045d 35 shdn = 0; //must reset sensor for an mbed reset to work
CharlesXu 1:95f5ac2f045d 36 wait(0.1);
CharlesXu 1:95f5ac2f045d 37 shdn = 1;
CharlesXu 1:95f5ac2f045d 38 wait(0.1);
CharlesXu 1:95f5ac2f045d 39 /* init the 53L0A1 board with default values */
CharlesXu 1:95f5ac2f045d 40 status = board->init_board();
CharlesXu 1:95f5ac2f045d 41 while (status) {
CharlesXu 1:95f5ac2f045d 42 pc.printf("Failed to init board! \r\n");
CharlesXu 1:95f5ac2f045d 43 status = board->init_board();
CharlesXu 1:95f5ac2f045d 44 }
CharlesXu 1:95f5ac2f045d 45
CharlesXu 1:95f5ac2f045d 46
CharlesXu 3:5d43739ec09f 47
CharlesXu 1:95f5ac2f045d 48 counter = 0;
CharlesXu 1:95f5ac2f045d 49 // reset the xbees (at least 200ns)
CharlesXu 1:95f5ac2f045d 50 rst1 = 0;
CharlesXu 1:95f5ac2f045d 51 wait_ms(1);
CharlesXu 1:95f5ac2f045d 52 rst1 = 1;
CharlesXu 1:95f5ac2f045d 53 wait_ms(1);
CharlesXu 1:95f5ac2f045d 54 input = 'I';
CharlesXu 3:5d43739ec09f 55
CharlesXu 1:95f5ac2f045d 56 A.speed(0);
CharlesXu 1:95f5ac2f045d 57 B.speed(0);
CharlesXu 3:5d43739ec09f 58 wait(2);
CharlesXu 3:5d43739ec09f 59 direction = 1;
CharlesXu 1:95f5ac2f045d 60 while(1) {
CharlesXu 1:95f5ac2f045d 61 if(xbee1.readable()) {
CharlesXu 1:95f5ac2f045d 62 input = xbee1.getc();
CharlesXu 3:5d43739ec09f 63 wait(0.2);
CharlesXu 1:95f5ac2f045d 64 }
CharlesXu 2:112ca6a4fc73 65 status = board->sensor_centre->get_distance(&distance);
CharlesXu 2:112ca6a4fc73 66 if (status == VL53L0X_ERROR_NONE) {
CharlesXu 2:112ca6a4fc73 67 pc.printf("D=%ld mm\r\n", distance);
CharlesXu 3:5d43739ec09f 68
CharlesXu 3:5d43739ec09f 69 }
CharlesXu 3:5d43739ec09f 70
CharlesXu 3:5d43739ec09f 71 while (distance < 200) {
CharlesXu 3:5d43739ec09f 72 direction = rand()*100;
CharlesXu 3:5d43739ec09f 73 if (direction > 50)
CharlesXu 3:5d43739ec09f 74 {
CharlesXu 3:5d43739ec09f 75 A.speed(-0.5);
CharlesXu 3:5d43739ec09f 76 B.speed(-0.5);
CharlesXu 3:5d43739ec09f 77 led = 0;
CharlesXu 3:5d43739ec09f 78 wait(0.1);
CharlesXu 3:5d43739ec09f 79 } else
CharlesXu 3:5d43739ec09f 80 {
CharlesXu 3:5d43739ec09f 81
CharlesXu 3:5d43739ec09f 82 A.speed(0.5);
CharlesXu 3:5d43739ec09f 83 B.speed(0.5);
CharlesXu 3:5d43739ec09f 84 led = 1;
CharlesXu 3:5d43739ec09f 85 wait(0.1);
CharlesXu 3:5d43739ec09f 86 }
CharlesXu 3:5d43739ec09f 87 status = board->sensor_centre->get_distance(&distance);
CharlesXu 3:5d43739ec09f 88 led = 0;
CharlesXu 3:5d43739ec09f 89 A.speed(0);
CharlesXu 3:5d43739ec09f 90 B.speed(0);
CharlesXu 2:112ca6a4fc73 91 }
CharlesXu 1:95f5ac2f045d 92 if (input == 'A')
CharlesXu 1:95f5ac2f045d 93 {
CharlesXu 3:5d43739ec09f 94 //myTTS.speakf("S");//Speak command starts with "S"
CharlesXu 3:5d43739ec09f 95 //myTTS.speakf("forward");
CharlesXu 3:5d43739ec09f 96 //myTTS.speakf("\r"); //marks end of speak command
CharlesXu 3:5d43739ec09f 97 //myTTS.ready();
CharlesXu 3:5d43739ec09f 98 A.speed(-0.5);
CharlesXu 3:5d43739ec09f 99 B.speed(0.5);
CharlesXu 3:5d43739ec09f 100 wait(0.2);
CharlesXu 3:5d43739ec09f 101 } else if (input == 'B')
CharlesXu 3:5d43739ec09f 102 {
CharlesXu 3:5d43739ec09f 103 //myTTS.speakf("S");//Speak command starts with "S"
CharlesXu 3:5d43739ec09f 104 //myTTS.speakf("back");
CharlesXu 3:5d43739ec09f 105 //myTTS.speakf("\r"); //marks end of speak command
CharlesXu 3:5d43739ec09f 106 //myTTS.ready();
CharlesXu 1:95f5ac2f045d 107 A.speed(0.5);
CharlesXu 1:95f5ac2f045d 108 B.speed(-0.5);
CharlesXu 3:5d43739ec09f 109 wait(0.2);
CharlesXu 1:95f5ac2f045d 110 } else if (input == 'C')
CharlesXu 1:95f5ac2f045d 111 {
CharlesXu 1:95f5ac2f045d 112 myTTS.speakf("S");//Speak command starts with "S"
CharlesXu 1:95f5ac2f045d 113 myTTS.speakf("left");
CharlesXu 1:95f5ac2f045d 114 myTTS.speakf("\r"); //marks end of speak command
CharlesXu 1:95f5ac2f045d 115 myTTS.ready();
CharlesXu 1:95f5ac2f045d 116 A.speed(0.5);
CharlesXu 1:95f5ac2f045d 117 B.speed(0.5);
CharlesXu 3:5d43739ec09f 118 wait(0.2);
CharlesXu 1:95f5ac2f045d 119 } else if (input == 'D')
CharlesXu 1:95f5ac2f045d 120 {
CharlesXu 1:95f5ac2f045d 121 myTTS.speakf("S");//Speak command starts with "S"
CharlesXu 1:95f5ac2f045d 122 myTTS.speakf("right");
CharlesXu 1:95f5ac2f045d 123 myTTS.speakf("\r"); //marks end of speak command
CharlesXu 1:95f5ac2f045d 124 myTTS.ready();
CharlesXu 1:95f5ac2f045d 125 A.speed(-0.5);
CharlesXu 1:95f5ac2f045d 126 B.speed(-0.5);
CharlesXu 3:5d43739ec09f 127 wait(0.2);
CharlesXu 1:95f5ac2f045d 128 } else if (input == 'E')
CharlesXu 1:95f5ac2f045d 129 {
CharlesXu 1:95f5ac2f045d 130 myTTS.speakf("S");//Speak command starts with "S"
CharlesXu 2:112ca6a4fc73 131 myTTS.speakf("stop");
CharlesXu 1:95f5ac2f045d 132 myTTS.speakf("\r"); //marks end of speak command
CharlesXu 1:95f5ac2f045d 133 myTTS.ready();
CharlesXu 1:95f5ac2f045d 134 A.speed(0);
CharlesXu 1:95f5ac2f045d 135 B.speed(0);
CharlesXu 3:5d43739ec09f 136 wait(0.2);
vcazan 0:25aca1983704 137 }
vcazan 0:25aca1983704 138 }
vcazan 0:25aca1983704 139 }