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 12 21:59:14 2018 +0000
Revision:
3:5d43739ec09f
Parent:
2:112ca6a4fc73
Child:
4:c15361d55018
Glove-bot receiver code

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