GT ECE 4180 Lab Team - Raj Madisetti and Arjun Sonti

Dependencies:   mbed Servo Motordriver X_NUCLEO_53L0A1 HC_SR04_Ultrasonic_Library

Remote Control Car

Georgia Tech ECE 4180 Embedded Systems Design Final Project

Team Members

Raj Madisetti Arjun Sonti

Committer:
rmadisetti3
Date:
Tue Nov 17 18:27:13 2020 +0000
Revision:
2:5c9526ccb055
Parent:
1:1c1ad0c1c260
Child:
3:4956cc0efdf3
Bluetooth functionality implemented and motors operational

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rmadisetti3 0:20a8dfc396cb 1 #include "mbed.h"
rmadisetti3 0:20a8dfc396cb 2 #include "XNucleo53L0A1.h"
rmadisetti3 0:20a8dfc396cb 3 #include "Servo.h"
rmadisetti3 0:20a8dfc396cb 4 #include "motordriver.h"
rmadisetti3 0:20a8dfc396cb 5 #include <stdio.h>
rmadisetti3 1:1c1ad0c1c260 6 Serial pc(USBTX,USBRX);
rmadisetti3 2:5c9526ccb055 7 Serial blue(p9,p10);
rmadisetti3 1:1c1ad0c1c260 8 DigitalOut shdn(p26);
rmadisetti3 0:20a8dfc396cb 9 DigitalOut myled(LED1);
rmadisetti3 0:20a8dfc396cb 10
rmadisetti3 1:1c1ad0c1c260 11 #define VL53L0_I2C_SDA p28
rmadisetti3 1:1c1ad0c1c260 12 #define VL53L0_I2C_SCL p27
rmadisetti3 0:20a8dfc396cb 13
rmadisetti3 1:1c1ad0c1c260 14 static XNucleo53L0A1 *board=NULL;
rmadisetti3 0:20a8dfc396cb 15 Motor M(p21, p22, p23, 1); // pwm, fwd, rev, can brake
rmadisetti3 1:1c1ad0c1c260 16 Servo S(p24);
rmadisetti3 0:20a8dfc396cb 17
rmadisetti3 0:20a8dfc396cb 18
rmadisetti3 0:20a8dfc396cb 19 int main() {
rmadisetti3 1:1c1ad0c1c260 20 int status;
rmadisetti3 1:1c1ad0c1c260 21 uint32_t distance;
rmadisetti3 1:1c1ad0c1c260 22 DevI2C *device_i2c = new DevI2C(VL53L0_I2C_SDA, VL53L0_I2C_SCL);
rmadisetti3 1:1c1ad0c1c260 23 /* creates the 53L0A1 expansion board singleton obj */
rmadisetti3 1:1c1ad0c1c260 24 board = XNucleo53L0A1::instance(device_i2c, A2, D8, D2);
rmadisetti3 1:1c1ad0c1c260 25 shdn = 0; //must reset sensor for an mbed reset to work
rmadisetti3 1:1c1ad0c1c260 26 wait(0.1);
rmadisetti3 1:1c1ad0c1c260 27 shdn = 1;
rmadisetti3 1:1c1ad0c1c260 28 wait(0.1);
rmadisetti3 1:1c1ad0c1c260 29 /* init the 53L0A1 board with default values */
rmadisetti3 1:1c1ad0c1c260 30 status = board->init_board();
rmadisetti3 1:1c1ad0c1c260 31 while (status) {
rmadisetti3 1:1c1ad0c1c260 32 pc.printf("Failed to init board! \r\n");
rmadisetti3 1:1c1ad0c1c260 33 status = board->init_board();
rmadisetti3 1:1c1ad0c1c260 34 }
rmadisetti3 1:1c1ad0c1c260 35
rmadisetti3 1:1c1ad0c1c260 36
rmadisetti3 1:1c1ad0c1c260 37 //Logic for AdaFruit App
rmadisetti3 1:1c1ad0c1c260 38 char bnum=0;
rmadisetti3 1:1c1ad0c1c260 39 char bhit=0;
rmadisetti3 1:1c1ad0c1c260 40 while(1) {
rmadisetti3 1:1c1ad0c1c260 41 if (blue.getc()=='!') {
rmadisetti3 1:1c1ad0c1c260 42 if (blue.getc()=='B') { //button data packet
rmadisetti3 1:1c1ad0c1c260 43 bnum = blue.getc(); //button number
rmadisetti3 1:1c1ad0c1c260 44 bhit = blue.getc(); //1=hit, 0=release
rmadisetti3 1:1c1ad0c1c260 45 if (blue.getc()==char(~('!' + 'B' + bnum + bhit))) { //checksum OK?
rmadisetti3 1:1c1ad0c1c260 46 myled = bnum - '0'; //current button number will appear on LEDs
rmadisetti3 1:1c1ad0c1c260 47 switch (bnum) {
rmadisetti3 2:5c9526ccb055 48 //case '1': //AutoPilot Mode
rmadisetti3 2:5c9526ccb055 49 // if (bhit=='1') {
rmadisetti3 2:5c9526ccb055 50 // M.speed(1.0);
rmadisetti3 2:5c9526ccb055 51 // //loop taking and printing distance
rmadisetti3 2:5c9526ccb055 52 // status = board->sensor_centre->get_distance(&distance);
rmadisetti3 2:5c9526ccb055 53 // if (distance <= 50) {
rmadisetti3 2:5c9526ccb055 54 // //turn left or right depending on location of sensor
rmadisetti3 2:5c9526ccb055 55 // M.speed(0);
rmadisetti3 2:5c9526ccb055 56 // }
rmadisetti3 2:5c9526ccb055 57 // }
rmadisetti3 2:5c9526ccb055 58 // break;
rmadisetti3 1:1c1ad0c1c260 59 case '5': //forward
rmadisetti3 1:1c1ad0c1c260 60 if (bhit=='1') {
rmadisetti3 2:5c9526ccb055 61 status = board->sensor_centre->get_distance(&distance);
rmadisetti3 2:5c9526ccb055 62 if (distance <= 50) {
rmadisetti3 2:5c9526ccb055 63 M.speed(1.0); //drive forward
rmadisetti3 2:5c9526ccb055 64 } else {
rmadisetti3 2:5c9526ccb055 65 M.speed(0.0); //stop
rmadisetti3 2:5c9526ccb055 66 }
rmadisetti3 1:1c1ad0c1c260 67 } else {
rmadisetti3 1:1c1ad0c1c260 68 M.speed(0.0); //stop
rmadisetti3 2:5c9526ccb055 69 }
rmadisetti3 1:1c1ad0c1c260 70 break;
rmadisetti3 1:1c1ad0c1c260 71 case '6': //reverse
rmadisetti3 1:1c1ad0c1c260 72 if (bhit=='1') {
rmadisetti3 1:1c1ad0c1c260 73 M.speed(-1.0); //reverse
rmadisetti3 1:1c1ad0c1c260 74 } else {
rmadisetti3 1:1c1ad0c1c260 75 M.speed(0.0); //stop
rmadisetti3 1:1c1ad0c1c260 76 }
rmadisetti3 1:1c1ad0c1c260 77 break;
rmadisetti3 1:1c1ad0c1c260 78 case '7': //left
rmadisetti3 1:1c1ad0c1c260 79 if (bhit=='1') {
rmadisetti3 1:1c1ad0c1c260 80 S = S - 0.5; //turn left
rmadisetti3 1:1c1ad0c1c260 81 }
rmadisetti3 1:1c1ad0c1c260 82 break;
rmadisetti3 1:1c1ad0c1c260 83 case '8': //right
rmadisetti3 1:1c1ad0c1c260 84 if (bhit=='1') {
rmadisetti3 1:1c1ad0c1c260 85 S = S + 0.5; //turn right
rmadisetti3 1:1c1ad0c1c260 86 }
rmadisetti3 1:1c1ad0c1c260 87 break;
rmadisetti3 2:5c9526ccb055 88 }
rmadisetti3 2:5c9526ccb055 89 }
rmadisetti3 2:5c9526ccb055 90 }
rmadisetti3 2:5c9526ccb055 91 }
rmadisetti3 2:5c9526ccb055 92 }
rmadisetti3 0:20a8dfc396cb 93 }