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:
Wed Dec 05 23:08:58 2018 +0000
Revision:
2:112ca6a4fc73
Parent:
1:95f5ac2f045d
Child:
3:5d43739ec09f
Updated mbed file

Who changed what in which revision?

UserRevisionLine numberNew contents of line
CharlesXu 1:95f5ac2f045d 1 // basic xbee example
CharlesXu 1:95f5ac2f045d 2 // - take chars from the terminal, push them out xbee1
CharlesXu 1:95f5ac2f045d 3 // - listen on xbee2, and print value + 1 to terminal
CharlesXu 1:95f5ac2f045d 4 #include "Motor.h"
vcazan 0:25aca1983704 5 #include "mbed.h"
CharlesXu 1:95f5ac2f045d 6 #include "emic2.h"
CharlesXu 1:95f5ac2f045d 7 #include "XNucleo53L0A1.h"
CharlesXu 1:95f5ac2f045d 8 #include <stdio.h>
CharlesXu 1:95f5ac2f045d 9 Serial pc(USBTX, USBRX);
CharlesXu 1:95f5ac2f045d 10 DigitalOut shdn(p26);
vcazan 0:25aca1983704 11
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 1:95f5ac2f045d 16 static XNucleo53L0A1 *board=NULL;
CharlesXu 1:95f5ac2f045d 17 emic2 myTTS(p13, p14);
CharlesXu 1:95f5ac2f045d 18 Serial xbee1(p9, p10);
CharlesXu 1:95f5ac2f045d 19 DigitalOut rst1(p11);
vcazan 0:25aca1983704 20
CharlesXu 1:95f5ac2f045d 21 Motor B(p23, p6, p5); // pwm, fwd, rev, can brake, right
CharlesXu 1:95f5ac2f045d 22 Motor A(p24, p7, p8); // left motor
CharlesXu 1:95f5ac2f045d 23
CharlesXu 1:95f5ac2f045d 24 char input;
CharlesXu 1:95f5ac2f045d 25 int counter;
vcazan 0:25aca1983704 26
vcazan 0:25aca1983704 27 int main() {
CharlesXu 1:95f5ac2f045d 28 //initialize distance sensor
CharlesXu 1:95f5ac2f045d 29 int status;
CharlesXu 1:95f5ac2f045d 30 uint32_t distance;
CharlesXu 1:95f5ac2f045d 31 DevI2C *device_i2c = new DevI2C(VL53L0_I2C_SDA, VL53L0_I2C_SCL);
CharlesXu 1:95f5ac2f045d 32 /* creates the 53L0A1 expansion board singleton obj */
CharlesXu 1:95f5ac2f045d 33 board = XNucleo53L0A1::instance(device_i2c, A2, D8, D2);
CharlesXu 1:95f5ac2f045d 34 shdn = 0; //must reset sensor for an mbed reset to work
CharlesXu 1:95f5ac2f045d 35 wait(0.1);
CharlesXu 1:95f5ac2f045d 36 shdn = 1;
CharlesXu 1:95f5ac2f045d 37 wait(0.1);
CharlesXu 1:95f5ac2f045d 38 /* init the 53L0A1 board with default values */
CharlesXu 1:95f5ac2f045d 39 status = board->init_board();
CharlesXu 1:95f5ac2f045d 40 while (status) {
CharlesXu 1:95f5ac2f045d 41 pc.printf("Failed to init board! \r\n");
CharlesXu 1:95f5ac2f045d 42 status = board->init_board();
CharlesXu 1:95f5ac2f045d 43 }
CharlesXu 1:95f5ac2f045d 44
CharlesXu 1:95f5ac2f045d 45
CharlesXu 1:95f5ac2f045d 46 myTTS.volume(2);
CharlesXu 1:95f5ac2f045d 47 myTTS.voice(3);
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 1:95f5ac2f045d 55 A.speed(0);
CharlesXu 1:95f5ac2f045d 56 B.speed(0);
CharlesXu 1:95f5ac2f045d 57 while(1) {
CharlesXu 1:95f5ac2f045d 58 if(xbee1.readable()) {
CharlesXu 1:95f5ac2f045d 59 input = xbee1.getc();
CharlesXu 1:95f5ac2f045d 60 }
CharlesXu 1:95f5ac2f045d 61 A.speed(0);
CharlesXu 1:95f5ac2f045d 62 B.speed(0);
CharlesXu 1:95f5ac2f045d 63
CharlesXu 2:112ca6a4fc73 64 status = board->sensor_centre->get_distance(&distance);
CharlesXu 2:112ca6a4fc73 65 if (status == VL53L0X_ERROR_NONE) {
CharlesXu 2:112ca6a4fc73 66 pc.printf("D=%ld mm\r\n", distance);
CharlesXu 2:112ca6a4fc73 67 }
CharlesXu 1:95f5ac2f045d 68 if (input == 'A')
CharlesXu 1:95f5ac2f045d 69 {
CharlesXu 1:95f5ac2f045d 70 myTTS.speakf("S");//Speak command starts with "S"
CharlesXu 1:95f5ac2f045d 71 myTTS.speakf("forward");
CharlesXu 1:95f5ac2f045d 72 myTTS.speakf("\r"); //marks end of speak command
CharlesXu 1:95f5ac2f045d 73 myTTS.ready();
CharlesXu 1:95f5ac2f045d 74 A.speed(0.5);
CharlesXu 1:95f5ac2f045d 75 B.speed(-0.5);
CharlesXu 1:95f5ac2f045d 76 wait(0.5);
CharlesXu 1:95f5ac2f045d 77 } else if (input == 'B')
CharlesXu 1:95f5ac2f045d 78 {
CharlesXu 1:95f5ac2f045d 79 myTTS.speakf("S");//Speak command starts with "S"
CharlesXu 1:95f5ac2f045d 80 myTTS.speakf("back");
CharlesXu 1:95f5ac2f045d 81 myTTS.speakf("\r"); //marks end of speak command
CharlesXu 1:95f5ac2f045d 82 myTTS.ready();
CharlesXu 1:95f5ac2f045d 83 A.speed(-0.5);
CharlesXu 1:95f5ac2f045d 84 B.speed(0.5);
CharlesXu 1:95f5ac2f045d 85 wait(0.5);
CharlesXu 1:95f5ac2f045d 86 } else if (input == 'C')
CharlesXu 1:95f5ac2f045d 87 {
CharlesXu 1:95f5ac2f045d 88 myTTS.speakf("S");//Speak command starts with "S"
CharlesXu 1:95f5ac2f045d 89 myTTS.speakf("left");
CharlesXu 1:95f5ac2f045d 90 myTTS.speakf("\r"); //marks end of speak command
CharlesXu 1:95f5ac2f045d 91 myTTS.ready();
CharlesXu 1:95f5ac2f045d 92 A.speed(0.5);
CharlesXu 1:95f5ac2f045d 93 B.speed(0.5);
CharlesXu 1:95f5ac2f045d 94 wait(0.5);
CharlesXu 1:95f5ac2f045d 95 } else if (input == 'D')
CharlesXu 1:95f5ac2f045d 96 {
CharlesXu 1:95f5ac2f045d 97 myTTS.speakf("S");//Speak command starts with "S"
CharlesXu 1:95f5ac2f045d 98 myTTS.speakf("right");
CharlesXu 1:95f5ac2f045d 99 myTTS.speakf("\r"); //marks end of speak command
CharlesXu 1:95f5ac2f045d 100 myTTS.ready();
CharlesXu 1:95f5ac2f045d 101 A.speed(-0.5);
CharlesXu 1:95f5ac2f045d 102 B.speed(-0.5);
CharlesXu 1:95f5ac2f045d 103 wait(0.5);
CharlesXu 1:95f5ac2f045d 104 } else if (input == 'E')
CharlesXu 1:95f5ac2f045d 105 {
CharlesXu 1:95f5ac2f045d 106 myTTS.speakf("S");//Speak command starts with "S"
CharlesXu 2:112ca6a4fc73 107 myTTS.speakf("stop");
CharlesXu 1:95f5ac2f045d 108 myTTS.speakf("\r"); //marks end of speak command
CharlesXu 1:95f5ac2f045d 109 myTTS.ready();
CharlesXu 1:95f5ac2f045d 110 A.speed(0);
CharlesXu 1:95f5ac2f045d 111 B.speed(0);
CharlesXu 1:95f5ac2f045d 112 wait(0.5);
CharlesXu 1:95f5ac2f045d 113
vcazan 0:25aca1983704 114 }
vcazan 0:25aca1983704 115 }
vcazan 0:25aca1983704 116 }